From dfd9c869d525d71bd2d38e461559cbfdf3c2d757 Mon Sep 17 00:00:00 2001 From: nojhan Date: Tue, 3 Mar 2015 15:56:44 +0100 Subject: [PATCH] first import book --- book/LICENSE | 20 + book/README.rst | 105 + book/_images/aapssfc.png | Bin 0 -> 1139456 bytes book/_images/aapssfc.svg | 6297 +++++++++++++++++ book/_sources/index.rst | 135 + book/_sources/introduction.rst | 11 + book/_sources/mounty_hall.rst | 10 + book/_sources/nombre.rst | 9 + book/_sources/pendu.rst | 9 + book/_sources/principes.rst | 7 + book/_sources/python.rst | 40 + book/_templates/runestone_slides/console.html | 13 + book/_templates/runestone_slides/layout.html | 171 + .../runestone_slides/static/common.js | 129 + .../runestone_slides/static/console.css | 60 + .../runestone_slides/static/console.js | 91 + .../runestone_slides/static/controller.js | 57 + .../runestone_slides/static/init.js | 2 + .../static/runestone_slides.css | 7 + .../runestone_slides/static/slides.css | 47 + .../runestone_slides/static/slides.js | 548 ++ .../runestone_slides/static/styles.css | 723 ++ .../runestone_slides/static/sync.js | 129 + .../runestone_slides/static/theme.css | 3 + book/_templates/runestone_slides/theme.conf | 7 + .../sphinx_bootstrap/globaltoc.html | 7 + book/_templates/sphinx_bootstrap/layout.html | 316 + .../_templates/sphinx_bootstrap/localtoc.html | 4 + .../sphinx_bootstrap/relations.html | 30 + .../sphinx_bootstrap/sourcelink.html | 4 + .../bootstrap-3.0.0/css/bootstrap.min.css | 9 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 14079 bytes .../fonts/glyphicons-halflings-regular.svg | 228 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 29512 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 16448 bytes .../bootstrap-3.0.0/js/bootstrap.min.js | 6 + .../static/bootstrap-sphinx.css_t | 57 + .../static/bootstrap-sphinx.js | 132 + .../sphinx_bootstrap/static/img/Facebook.png | Bin 0 -> 3152 bytes .../static/img/Facebook_icon.png | Bin 0 -> 3079 bytes .../sphinx_bootstrap/static/img/Twitter.png | Bin 0 -> 3728 bytes .../static/img/Twitter_icon.png | Bin 0 -> 3177 bytes .../static/img/aapssfc_logo.png | Bin 0 -> 99955 bytes .../static/img/aapssfc_logo.svg | 595 ++ book/_templates/sphinx_bootstrap/theme.conf | 46 + book/common/.gitignore | 0 .../bootstrap/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 418 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 312 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 205 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 348 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 5815 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 278 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 328 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes book/common/css/activecode.css | 36 + book/common/css/codemirror.css | 202 + book/common/css/edu-python.css | 414 ++ book/common/css/guiders-1.3.0.css | 138 + .../css/jquery-ui-1.10.3.custom.min.css | 5 + book/common/css/poll.css | 25 + .../css/runestone-custom-sphinx-bootstrap.css | 380 + book/common/css/style.css | 350 + book/common/css/tabbedstuff.css | 32 + book/common/css/user-highlights.css | 65 + book/common/css/video.css | 51 + book/common/ext/codelens/v3/css/basic.css | 61 + .../common/ext/codelens/v3/css/codemirror.css | 173 + book/common/ext/codelens/v3/css/index.css | 201 + .../ext/codelens/v3/css/jquery.qtip.css | 573 ++ .../ext/codelens/v3/css/opt-frontend.css | 86 + .../ext/codelens/v3/css/opt-lessons.css | 85 + book/common/ext/codelens/v3/css/pytutor.css | 749 ++ .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.21.custom.css | 316 + .../ui-lightness/jquery-ui-1.8.24.custom.css | 335 + book/common/ext/codelens/v3/css/x.png | Bin 0 -> 1066 bytes .../codelens/v3/js/codemirror/codemirror.js | 3237 +++++++++ .../ext/codelens/v3/js/codemirror/python.js | 338 + book/common/ext/codelens/v3/js/d3.v2.min.js | 4 + .../common/ext/codelens/v3/js/iframe-embed.js | 185 + book/common/ext/codelens/v3/js/index.js | 16 + .../ext/codelens/v3/js/jquery-1.6.min.js | 16 + .../ext/codelens/v3/js/jquery-1.8.2.min.js | 2 + .../v3/js/jquery-ui-1.8.21.custom.min.js | 21 + .../v3/js/jquery-ui-1.8.24.custom.min.js | 25 + .../ext/codelens/v3/js/jquery.ba-bbq.min.js | 18 + .../ext/codelens/v3/js/jquery.corner.js | 249 + .../v3/js/jquery.jsPlumb-1.3.10-all-min.js | 1 + .../v3/js/jquery.jsPlumb-1.3.15-all-min.js | 1 + .../ext/codelens/v3/js/jquery.qtip.min.js | 2 + .../ext/codelens/v3/js/jquery.simplemodal.js | 26 + .../common/ext/codelens/v3/js/opt-frontend.js | 631 ++ book/common/ext/codelens/v3/js/opt-lessons.js | 118 + book/common/ext/codelens/v3/js/pytutor.js | 3463 +++++++++ .../ext/js-parsons/lib/jquery-ui.min.js | 15 + book/common/ext/js-parsons/lib/jquery.min.js | 4 + .../common/ext/js-parsons/lib/jquery.sound.js | 91 + book/common/ext/js-parsons/lib/lis.js | 120 + .../ext/js-parsons/lib/prettify.COPYING | 202 + book/common/ext/js-parsons/lib/prettify.css | 1 + book/common/ext/js-parsons/lib/prettify.js | 622 ++ book/common/ext/js-parsons/lib/skulpt.js | 483 ++ .../ext/js-parsons/lib/underscore-min.js | 27 + book/common/ext/js-parsons/parsons.css | 103 + book/common/ext/js-parsons/parsons.js | 781 ++ book/common/ext/skulpt/dist/skulpt-stdlib.js | 1 + book/common/ext/skulpt/dist/skulpt.min.js | 749 ++ book/common/images/play_overlay_icon.png | Bin 0 -> 5841 bytes book/common/js/activecode.js | 468 ++ book/common/js/animationbase.js | 204 + book/common/js/assess.js | 366 + book/common/js/bookfuncs.js | 950 +++ book/common/js/codemirror.js | 3192 +++++++++ book/common/js/doctools.js | 237 + book/common/js/edu-python.js | 632 ++ book/common/js/guiders-1.3.0.js | 594 ++ book/common/js/javascript.js | 630 ++ book/common/js/jquery-fix.js | 4 + book/common/js/jquery-migrate-1.2.1.min.js | 2 + book/common/js/jquery-ui-1.10.3.custom.min.js | 7 + book/common/js/jquery.highlight.js | 53 + book/common/js/jquery.hotkey.js | 15 + book/common/js/jquery.idle-timer.js | 262 + book/common/js/jquery.js | 5 + book/common/js/jquery.tablesorter.js | 1031 +++ book/common/js/navhelp.js | 219 + book/common/js/parsons-noconflict.js | 5 + book/common/js/poll.js | 61 + book/common/js/processing-1.4.1.min.js | 13 + book/common/js/python.js | 340 + book/common/js/rangy-core.js | 10 + book/common/js/rangy-cssclassapplier.js | 713 ++ book/common/js/rangy-textrange.js | 33 + book/common/js/sortmodels.js | 601 ++ book/common/js/sortviewers.js | 61 + book/common/js/user-highlights.js | 364 + book/common/js/waypoints.min.js | 8 + book/common/js/websupport.js | 808 +++ book/conf.py | 135 + book/modules/__init__.py | 1 + book/modules/gatech/__init__.py | 1 + book/modules/gatech/parsons/__init__.py | 3 + book/modules/gatech/parsons/parsons.py | 237 + book/modules/luther/__init__.py | 0 book/modules/luther/sphinx/__init__.py | 0 .../luther/sphinx/activecode/__init__.py | 1 + .../luther/sphinx/activecode/activecode.py | 290 + .../luther/sphinx/animation/__init__.py | 2 + .../luther/sphinx/animation/animation.py | 105 + .../luther/sphinx/animation/animationbase.js | 204 + .../sphinx/animation/animationrefactor.html | 38 + .../sphinx/animation/animationrefactor.js | 256 + .../luther/sphinx/animation/chart.html | 51 + .../sphinx/animation/jqchart/gChartBasic.html | 41 + .../animation/jqchart/jquery.gchart.ext.js | 334 + .../jqchart/jquery.gchart.ext.min.js | 8 + .../jqchart/jquery.gchart.ext.pack.js | 8 + .../jqchart/jquery.gchart.graphviz.js | 112 + .../jqchart/jquery.gchart.graphviz.min.js | 8 + .../jqchart/jquery.gchart.graphviz.pack.js | 8 + .../animation/jqchart/jquery.gchart.icons.js | 1279 ++++ .../jqchart/jquery.gchart.icons.min.js | 8 + .../jqchart/jquery.gchart.icons.pack.js | 8 + .../sphinx/animation/jqchart/jquery.gchart.js | 1661 +++++ .../animation/jqchart/jquery.gchart.min.js | 8 + .../animation/jqchart/jquery.gchart.pack.js | 8 + .../luther/sphinx/animation/searchmodels.js | 138 + .../luther/sphinx/animation/simpletree.html | 41 + .../luther/sphinx/animation/simpletree.js | 63 + .../luther/sphinx/animation/sortingbase.html | 35 + .../luther/sphinx/animation/sortingdemo.html | 22 + .../luther/sphinx/animation/sortingdemo.js | 268 + .../sphinx/animation/sortingpackage.html | 32 + .../luther/sphinx/animation/sortingpackage.js | 870 +++ .../luther/sphinx/animation/sortmodels.js | 601 ++ .../luther/sphinx/animation/sortviewers.js | 61 + book/modules/luther/sphinx/assess/__init__.py | 2 + book/modules/luther/sphinx/assess/assess.py | 112 + .../luther/sphinx/assess/assessbase.py | 95 + .../modules/luther/sphinx/assess/blankfill.py | 123 + .../luther/sphinx/assess/min/assess-ck.js | 1 + .../luther/sphinx/assess/multiplechoice.py | 352 + .../luther/sphinx/assess/prototype.html | 53 + .../modules/luther/sphinx/assess/textfield.py | 65 + .../luther/sphinx/codelens/__init__.py | 1 + .../luther/sphinx/codelens/pg_encoder.py | 256 + .../luther/sphinx/codelens/pg_logger.py | 872 +++ .../luther/sphinx/codelens/visualizer.py | 210 + .../luther/sphinx/datafile/__init__.py | 127 + book/modules/luther/sphinx/disqus/__init__.py | 2 + book/modules/luther/sphinx/disqus/disqus.py | 115 + book/modules/luther/sphinx/meta/__init__.py | 2 + book/modules/luther/sphinx/meta/meta.py | 62 + book/modules/luther/sphinx/poll/__init__.py | 1 + book/modules/luther/sphinx/poll/poll.py | 149 + book/modules/luther/sphinx/reveal/__init__.py | 1 + book/modules/luther/sphinx/reveal/reveal.py | 64 + .../luther/sphinx/tabbedStuff/__init__.py | 1 + .../luther/sphinx/tabbedStuff/tabbedStuff.py | 178 + book/modules/luther/sphinx/video/__init__.py | 2 + book/modules/luther/sphinx/video/video.py | 134 + book/pavement.py | 90 + 233 files changed, 47797 insertions(+) create mode 100644 book/LICENSE create mode 100644 book/README.rst create mode 100644 book/_images/aapssfc.png create mode 100644 book/_images/aapssfc.svg create mode 100644 book/_sources/index.rst create mode 100644 book/_sources/introduction.rst create mode 100644 book/_sources/mounty_hall.rst create mode 100644 book/_sources/nombre.rst create mode 100644 book/_sources/pendu.rst create mode 100644 book/_sources/principes.rst create mode 100644 book/_sources/python.rst create mode 100644 book/_templates/runestone_slides/console.html create mode 100644 book/_templates/runestone_slides/layout.html create mode 100644 book/_templates/runestone_slides/static/common.js create mode 100644 book/_templates/runestone_slides/static/console.css create mode 100644 book/_templates/runestone_slides/static/console.js create mode 100644 book/_templates/runestone_slides/static/controller.js create mode 100644 book/_templates/runestone_slides/static/init.js create mode 100644 book/_templates/runestone_slides/static/runestone_slides.css create mode 100644 book/_templates/runestone_slides/static/slides.css create mode 100644 book/_templates/runestone_slides/static/slides.js create mode 100644 book/_templates/runestone_slides/static/styles.css create mode 100644 book/_templates/runestone_slides/static/sync.js create mode 100644 book/_templates/runestone_slides/static/theme.css create mode 100644 book/_templates/runestone_slides/theme.conf create mode 100644 book/_templates/sphinx_bootstrap/globaltoc.html create mode 100644 book/_templates/sphinx_bootstrap/layout.html create mode 100644 book/_templates/sphinx_bootstrap/localtoc.html create mode 100644 book/_templates/sphinx_bootstrap/relations.html create mode 100644 book/_templates/sphinx_bootstrap/sourcelink.html create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/css/bootstrap.min.css create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.svg create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/js/bootstrap.min.js create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.css_t create mode 100644 book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.js create mode 100644 book/_templates/sphinx_bootstrap/static/img/Facebook.png create mode 100644 book/_templates/sphinx_bootstrap/static/img/Facebook_icon.png create mode 100644 book/_templates/sphinx_bootstrap/static/img/Twitter.png create mode 100644 book/_templates/sphinx_bootstrap/static/img/Twitter_icon.png create mode 100644 book/_templates/sphinx_bootstrap/static/img/aapssfc_logo.png create mode 100644 book/_templates/sphinx_bootstrap/static/img/aapssfc_logo.svg create mode 100644 book/_templates/sphinx_bootstrap/theme.conf create mode 100644 book/common/.gitignore create mode 100644 book/common/bootstrap/images/animated-overlay.gif create mode 100644 book/common/bootstrap/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 book/common/bootstrap/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 book/common/bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 book/common/bootstrap/images/ui-bg_flat_10_000000_40x100.png create mode 100644 book/common/bootstrap/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 book/common/bootstrap/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 book/common/bootstrap/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 book/common/bootstrap/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 book/common/bootstrap/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 book/common/bootstrap/images/ui-icons_222222_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_228ef1_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_2e83ff_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_454545_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_888888_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_cd0a0a_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_ef8c08_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_ffd27a_256x240.png create mode 100644 book/common/bootstrap/images/ui-icons_ffffff_256x240.png create mode 100644 book/common/css/activecode.css create mode 100644 book/common/css/codemirror.css create mode 100644 book/common/css/edu-python.css create mode 100644 book/common/css/guiders-1.3.0.css create mode 100644 book/common/css/jquery-ui-1.10.3.custom.min.css create mode 100644 book/common/css/poll.css create mode 100644 book/common/css/runestone-custom-sphinx-bootstrap.css create mode 100644 book/common/css/style.css create mode 100644 book/common/css/tabbedstuff.css create mode 100644 book/common/css/user-highlights.css create mode 100644 book/common/css/video.css create mode 100644 book/common/ext/codelens/v3/css/basic.css create mode 100644 book/common/ext/codelens/v3/css/codemirror.css create mode 100644 book/common/ext/codelens/v3/css/index.css create mode 100644 book/common/ext/codelens/v3/css/jquery.qtip.css create mode 100644 book/common/ext/codelens/v3/css/opt-frontend.css create mode 100644 book/common/ext/codelens/v3/css/opt-lessons.css create mode 100644 book/common/ext/codelens/v3/css/pytutor.css create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css create mode 100644 book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css create mode 100644 book/common/ext/codelens/v3/css/x.png create mode 100644 book/common/ext/codelens/v3/js/codemirror/codemirror.js create mode 100644 book/common/ext/codelens/v3/js/codemirror/python.js create mode 100644 book/common/ext/codelens/v3/js/d3.v2.min.js create mode 100644 book/common/ext/codelens/v3/js/iframe-embed.js create mode 100644 book/common/ext/codelens/v3/js/index.js create mode 100644 book/common/ext/codelens/v3/js/jquery-1.6.min.js create mode 100644 book/common/ext/codelens/v3/js/jquery-1.8.2.min.js create mode 100644 book/common/ext/codelens/v3/js/jquery-ui-1.8.21.custom.min.js create mode 100644 book/common/ext/codelens/v3/js/jquery-ui-1.8.24.custom.min.js create mode 100644 book/common/ext/codelens/v3/js/jquery.ba-bbq.min.js create mode 100644 book/common/ext/codelens/v3/js/jquery.corner.js create mode 100644 book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.10-all-min.js create mode 100644 book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.15-all-min.js create mode 100644 book/common/ext/codelens/v3/js/jquery.qtip.min.js create mode 100644 book/common/ext/codelens/v3/js/jquery.simplemodal.js create mode 100644 book/common/ext/codelens/v3/js/opt-frontend.js create mode 100644 book/common/ext/codelens/v3/js/opt-lessons.js create mode 100644 book/common/ext/codelens/v3/js/pytutor.js create mode 100644 book/common/ext/js-parsons/lib/jquery-ui.min.js create mode 100644 book/common/ext/js-parsons/lib/jquery.min.js create mode 100644 book/common/ext/js-parsons/lib/jquery.sound.js create mode 100644 book/common/ext/js-parsons/lib/lis.js create mode 100644 book/common/ext/js-parsons/lib/prettify.COPYING create mode 100755 book/common/ext/js-parsons/lib/prettify.css create mode 100755 book/common/ext/js-parsons/lib/prettify.js create mode 100644 book/common/ext/js-parsons/lib/skulpt.js create mode 100644 book/common/ext/js-parsons/lib/underscore-min.js create mode 100644 book/common/ext/js-parsons/parsons.css create mode 100644 book/common/ext/js-parsons/parsons.js create mode 100644 book/common/ext/skulpt/dist/skulpt-stdlib.js create mode 100644 book/common/ext/skulpt/dist/skulpt.min.js create mode 100644 book/common/images/play_overlay_icon.png create mode 100644 book/common/js/activecode.js create mode 100644 book/common/js/animationbase.js create mode 100644 book/common/js/assess.js create mode 100644 book/common/js/bookfuncs.js create mode 100644 book/common/js/codemirror.js create mode 100644 book/common/js/doctools.js create mode 100644 book/common/js/edu-python.js create mode 100644 book/common/js/guiders-1.3.0.js create mode 100644 book/common/js/javascript.js create mode 100644 book/common/js/jquery-fix.js create mode 100644 book/common/js/jquery-migrate-1.2.1.min.js create mode 100644 book/common/js/jquery-ui-1.10.3.custom.min.js create mode 100644 book/common/js/jquery.highlight.js create mode 100644 book/common/js/jquery.hotkey.js create mode 100644 book/common/js/jquery.idle-timer.js create mode 100644 book/common/js/jquery.js create mode 100644 book/common/js/jquery.tablesorter.js create mode 100644 book/common/js/navhelp.js create mode 100644 book/common/js/parsons-noconflict.js create mode 100644 book/common/js/poll.js create mode 100644 book/common/js/processing-1.4.1.min.js create mode 100644 book/common/js/python.js create mode 100644 book/common/js/rangy-core.js create mode 100644 book/common/js/rangy-cssclassapplier.js create mode 100644 book/common/js/rangy-textrange.js create mode 100644 book/common/js/sortmodels.js create mode 100644 book/common/js/sortviewers.js create mode 100644 book/common/js/user-highlights.js create mode 100644 book/common/js/waypoints.min.js create mode 100644 book/common/js/websupport.js create mode 100644 book/conf.py create mode 100644 book/modules/__init__.py create mode 100644 book/modules/gatech/__init__.py create mode 100644 book/modules/gatech/parsons/__init__.py create mode 100644 book/modules/gatech/parsons/parsons.py create mode 100644 book/modules/luther/__init__.py create mode 100644 book/modules/luther/sphinx/__init__.py create mode 100644 book/modules/luther/sphinx/activecode/__init__.py create mode 100644 book/modules/luther/sphinx/activecode/activecode.py create mode 100644 book/modules/luther/sphinx/animation/__init__.py create mode 100644 book/modules/luther/sphinx/animation/animation.py create mode 100644 book/modules/luther/sphinx/animation/animationbase.js create mode 100644 book/modules/luther/sphinx/animation/animationrefactor.html create mode 100644 book/modules/luther/sphinx/animation/animationrefactor.js create mode 100644 book/modules/luther/sphinx/animation/chart.html create mode 100644 book/modules/luther/sphinx/animation/jqchart/gChartBasic.html create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.min.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.pack.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.min.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.pack.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.min.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.pack.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.min.js create mode 100644 book/modules/luther/sphinx/animation/jqchart/jquery.gchart.pack.js create mode 100644 book/modules/luther/sphinx/animation/searchmodels.js create mode 100644 book/modules/luther/sphinx/animation/simpletree.html create mode 100644 book/modules/luther/sphinx/animation/simpletree.js create mode 100644 book/modules/luther/sphinx/animation/sortingbase.html create mode 100644 book/modules/luther/sphinx/animation/sortingdemo.html create mode 100644 book/modules/luther/sphinx/animation/sortingdemo.js create mode 100644 book/modules/luther/sphinx/animation/sortingpackage.html create mode 100644 book/modules/luther/sphinx/animation/sortingpackage.js create mode 100644 book/modules/luther/sphinx/animation/sortmodels.js create mode 100644 book/modules/luther/sphinx/animation/sortviewers.js create mode 100644 book/modules/luther/sphinx/assess/__init__.py create mode 100644 book/modules/luther/sphinx/assess/assess.py create mode 100644 book/modules/luther/sphinx/assess/assessbase.py create mode 100644 book/modules/luther/sphinx/assess/blankfill.py create mode 100644 book/modules/luther/sphinx/assess/min/assess-ck.js create mode 100644 book/modules/luther/sphinx/assess/multiplechoice.py create mode 100644 book/modules/luther/sphinx/assess/prototype.html create mode 100644 book/modules/luther/sphinx/assess/textfield.py create mode 100644 book/modules/luther/sphinx/codelens/__init__.py create mode 100644 book/modules/luther/sphinx/codelens/pg_encoder.py create mode 100644 book/modules/luther/sphinx/codelens/pg_logger.py create mode 100644 book/modules/luther/sphinx/codelens/visualizer.py create mode 100644 book/modules/luther/sphinx/datafile/__init__.py create mode 100644 book/modules/luther/sphinx/disqus/__init__.py create mode 100644 book/modules/luther/sphinx/disqus/disqus.py create mode 100644 book/modules/luther/sphinx/meta/__init__.py create mode 100644 book/modules/luther/sphinx/meta/meta.py create mode 100644 book/modules/luther/sphinx/poll/__init__.py create mode 100644 book/modules/luther/sphinx/poll/poll.py create mode 100644 book/modules/luther/sphinx/reveal/__init__.py create mode 100644 book/modules/luther/sphinx/reveal/reveal.py create mode 100644 book/modules/luther/sphinx/tabbedStuff/__init__.py create mode 100644 book/modules/luther/sphinx/tabbedStuff/tabbedStuff.py create mode 100644 book/modules/luther/sphinx/video/__init__.py create mode 100644 book/modules/luther/sphinx/video/video.py create mode 100644 book/pavement.py diff --git a/book/LICENSE b/book/LICENSE new file mode 100644 index 0000000..465f3b1 --- /dev/null +++ b/book/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 RunestoneInteractive + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/book/README.rst b/book/README.rst new file mode 100644 index 0000000..c22b77c --- /dev/null +++ b/book/README.rst @@ -0,0 +1,105 @@ +RunestoneTools +============== + +Packaging of the Runestone tools for publishing educational materials using github pages + +During January 2014 I switched my personal blog to OctoPress. This inspired me in many ways. First to try to blog more often, but more importantly to think about how the Runestone Toolset could be more easily used and deployed by people who didn't want to mess around with hosting, and setting up web2py servers, etc. This new project is the first phase of that inspiration. + +Prerequisites +------------- + +The following three prerequisites are easily installed using pip. All are either Python2.x or 3.x compatible. + +1. Install Spinx +2. Install Paver +3. Install paverutils + + +First, get `Sphinx `_, version 1.2.x is current as of this writing: + +:: + + # pip install sphinx + +Install `paver `_, at least version 1.2.0: + +:: + + # pip install paver + + +Once paver is installed you will also need to install sphinxcontrib-paverutils, at least version 1.5: + +:: + + # pip install sphinxcontrib-paverutils + +Quick Start +----------- + +This guide will get you started with creating your own course materials using the Runestone tools. + +1. Clone the RunestoneTools repository to your development machine ``git clone https://github.com/RunestoneInteractive/RunestoneTools.git`` + +2. Copy conf.py.prototype to conf.py You should not need to make any edits to get the basics working. + +2. Type the command ``paver build`` + +You will now have a build folder with a file index.html in it, along with some default content. The contents of the build folder are suitable for hosting anywhere that you can serve static web content from! For a small class you could even serve the content using the builtin Python webserver. + +:: + + $ cd build + $ python3 -m http.server + +Now from your browser you can open up http://localhost:8000/index.html + +Running your own web server isn't always the easiest way to go. So I have provided a couple of commands to make it easy for you to host your materials using githubs Pages feature. + + +#. Create a repository (if you don't already have one where you would like to host the finished product) Copy the github URL to your clipboard. + +#. Type the command ``paver setup_github_pages`` You will be prompted to paste in the URL to your repository. + +#. Type the command ``paver deploy`` + +#. Now you can access your pages from github at http://username.github.io/repo where username is your github username, and repo is the repository you created to host your deployed pages. Note that the deployed pages will be on the branch ``gh-pages`` + +Details +~~~~~~~ + +If you want to know the details of what goes on in the paver commands above here is what is happening: + +#. paver build -- creates build directory and html files +#. cd build +#. git init +#. git remote add origin git@github.com:bnmnetp/deploytest.git +#. git checkout -b gh-pages +#. git touch .nojekyll +#. git add .nojekyll +#. git add . +#. git commit -m 'first published version' +#. git push origin gh-pages + +Now wait a few minutes and go to http://username.github.io/yourRepo + +You should see an example page. + +Work in Progress +---------------- + +Here's what is on the todo list for this project. If you have the inclination to help out please let me know, I would welcome the help. + +Slides +~~~~~~ + +I am currently working on getting hieroglyph integrated so that you can make presentation slides with Runestone Interactive features. At the moment, some of the tools work and some do not. Activecode works OK, multiple choice questions work fine, reveals work fine, but CodeLens does not work and neither do parsons problems. Some things make more sense to work in slide mode than others. In particular getting CodeLens to work nicely would be valuable. I'll keep working on it. If you want to give it a try yourself. Install ``pip install hieroglyph``, and uncomment the line in your conf.py file that adds heiroglyph to the extension list. To build slides you need to run ``paver build --slides``. There is much that could be done in terms of styling, and working out some problems with javascript. Standard Sphinx loads all the js files up front, whereas the template for slides moves javscript loading to the bottom of the page. This appears to be the root of most problems. In addition the directives themselves for some could be updated to provide a better layout when generating slides instead of html. + +I'm not even sure whether this particular little project should be a high priority, I thought everything might just work, but then it didn't. So, I spent a day hacking at it until I realized it was much more work than I thought. + + +Login/Logout +~~~~~~~~~~~~ + +Currently you cannot have your students login to any resources you build and host yourself or on github. This is a problem that probably will not get fixed until later this semester or even this summer when I have more time to work on the back end. This has to do with the way that most web frameworks (including web2py) use session cookies to track login/logout. Given the current architecture of the tools it makes sense to go away from cookies anyway. + diff --git a/book/_images/aapssfc.png b/book/_images/aapssfc.png new file mode 100644 index 0000000000000000000000000000000000000000..9741047dfeeaafda658d2f9a14f9c39162efa63a GIT binary patch literal 1139456 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

tEv;qP+(e&4b3G0!sz^ND?U>m9ieE|-@2 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�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�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≻35z_J{4`OcdFlFfaiM+0@^FXH-K_aB^ZZ9@(~r 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

8q{0LXKQQAr~>K0p|*m#|#kCNIJ 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 aUla^eiNEk)y?%kaQR$YtT&c{RC;taE)|?;! literal 0 HcmV?d00001 diff --git a/book/_images/aapssfc.svg b/book/_images/aapssfc.svg new file mode 100644 index 0000000..491ece7 --- /dev/null +++ b/book/_images/aapssfc.svg @@ -0,0 +1,6297 @@ + + + + + Faire de l'ordinateur + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Faire de l'ordinateur + http://commons.wikimedia.org/wiki/File:Ttl_demultiplexer_3x_2bit.svg http://en.wikiquote.org/wiki/File:Maxwell%27sEquations.svg + + + nojhan,FDominec,YassineMrabet,lcfr@abstrusegoose.com + + + http://abstrusegoose.com/307 + + fr-FR + 2011-02-04 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 74LS04 + + + + + + + + + + + + + + + + + + + + + + + + 74LS08 + + 74LS08 + + 74LS08 + } + } + } + } + LPT + M1 + M2 + M3 + 5 VDC + + + + + 10110110 1100000100011101 1110010100000000 1110000101011001 1100100111110000 1100001100000010 0001101111100100 1000000111000011 0001100111000100 1100100100010000 0001001011001001 1001011111000100 1100111100011100 0010100111000100 1001111100101001 1110011111001000 0000000011100111 0011000000000001 0011100111111111 0001000110001000 1001111100010011 1000000011000010 00111101 + + + 0x7850 <+0>: push %ebp0x7851 <+1>: mov %esp,%ebp0x7853 <+3>: push %edi0x7854 <+4>: push %esi0x7855 <+5>: push %ebx0x7856 <+6>: sub $0x3c,%esp0x7859 <+9>: mov 0x8(%ebp),%edx0x785c <+12>: call 0x17f70x7861 <+17>: add $0x5693,%ebx0x7867 <+23>: test %edx,%edx0x7869 <+25>: je 0x797c <free+300> + + + #include "domstubs.idl"interface nsIDOMSVGDocument;[scriptable, uuid(b5d3074c-4f63-4936-bf39-49034efa26a5)]interface nsIDOMGetSVGDocument : nsISupports{nsIDOMDocument getSVGDocument ( );// raises( DOMException );}; + + + <rect style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.19071096;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect35930-1" width="68.012558"height="109.53059" x="306.56958" y="904.85675" transform="matrix(1,0,-0.0272583,0.99962842,0,0)" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if __main__=="__main__": print("AAPSSFC") + + diff --git a/book/_sources/index.rst b/book/_sources/index.rst new file mode 100644 index 0000000..ce838b5 --- /dev/null +++ b/book/_sources/index.rst @@ -0,0 +1,135 @@ + +.. © 2015 Johann Dreo + +.. |br| raw:: html + +
+ +================================================= +Apprendre à programmer |br| (sans se faire chier) +================================================= + +.. image:: ../_images/aapssfc.png + :scale: 30% + :alt: The grumpy cat loves you + +Introduction +############ +.. toctree:: + :maxdepth: 2 + + principes + introduction + python + + + +Exemples par difficulté +####################### + +.. Seul chapitre avec un niveau de TOC de 2 + +Jeux simples +============ +.. toctree:: + :maxdepth: 2 + + nombre + pendu + +Jeux de tableau +=============== +.. toctree:: + :maxdepth: 1 + + + + +Exemples par domaine +#################### + +Simulation +========== +.. toctree:: + :maxdepth: 1 + + mounty_hall + +Dessin procédural +================= +.. toctree:: + :maxdepth: 1 + + +Intelligence artificielle +========================= +.. toctree:: + :maxdepth: 1 + + pendu + +Système +======= +.. toctree:: + :maxdepth: 1 + + +Sécurité et réseaux +=================== +.. toctree:: + :maxdepth: 1 + + + + +Exemples par concept +#################### + +Boucles imbriquées +================== +.. toctree:: + :maxdepth: 1 + + +Récursivité +=========== +.. toctree:: + :maxdepth: 1 + + +Aléatoire +========= +.. toctree:: + :maxdepth: 1 + + mounty_hall + +Graphes +======= + + + +Exemples par approche +##################### + +Programmation impérative +======================== +.. toctree:: + :maxdepth: 1 + + nombre + mounty_hall + + +Programmation fonctionnelle +=========================== +.. toctree:: + :maxdepth: 1 + + pendu + +Programmation Objet +=================== +.. toctree:: + + diff --git a/book/_sources/introduction.rst b/book/_sources/introduction.rst new file mode 100644 index 0000000..e52f796 --- /dev/null +++ b/book/_sources/introduction.rst @@ -0,0 +1,11 @@ + + +Qu'est-ce que l'informatique ? +============================== + +Qu'est-ce qu'un ordinateur ? +---------------------------- + +Qu'est-ce que la programmation ? +-------------------------------- + diff --git a/book/_sources/mounty_hall.rst b/book/_sources/mounty_hall.rst new file mode 100644 index 0000000..5cef534 --- /dev/null +++ b/book/_sources/mounty_hall.rst @@ -0,0 +1,10 @@ + +Mounty Hall +----------- + +La chèvres et la voiture +^^^^^^^^^^^^^^^^^^^^^^^^ + +L'informatique au secours du cerveau +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + diff --git a/book/_sources/nombre.rst b/book/_sources/nombre.rst new file mode 100644 index 0000000..6f77de4 --- /dev/null +++ b/book/_sources/nombre.rst @@ -0,0 +1,9 @@ +Avec un nombre +--------------- + +Devine un nombre +^^^^^^^^^^^^^^^^ + +Pense à un nombre +^^^^^^^^^^^^^^^^^ + diff --git a/book/_sources/pendu.rst b/book/_sources/pendu.rst new file mode 100644 index 0000000..c99be29 --- /dev/null +++ b/book/_sources/pendu.rst @@ -0,0 +1,9 @@ + +Le pendu +-------- + +Jouer au pendu +^^^^^^^^^^^^^^ + +IA du pendu +^^^^^^^^^^^ diff --git a/book/_sources/principes.rst b/book/_sources/principes.rst new file mode 100644 index 0000000..a7058b9 --- /dev/null +++ b/book/_sources/principes.rst @@ -0,0 +1,7 @@ + +Principes de ce livre +--------------------- + +Conventions utilisées +--------------------- + diff --git a/book/_sources/python.rst b/book/_sources/python.rst new file mode 100644 index 0000000..f1a892e --- /dev/null +++ b/book/_sources/python.rst @@ -0,0 +1,40 @@ + +Bases de Python +=============== + +Une calculette +-------------- + +Branchement conditionnel : `if` +------------------------------- + +Boucles : `for` et `while` +-------------------------- + +Fonctions +--------- + +Listes +------ + +Dictionnaires +------------- + +Mise en forme du texte +---------------------- + +Modules +------- + + + +.. activecode:: example2 +.. +.. import turtle +.. t = turtle.Turtle() +.. +.. for i in range(4): +.. t.forward(100) +.. t.right(90) + + diff --git a/book/_templates/runestone_slides/console.html b/book/_templates/runestone_slides/console.html new file mode 100644 index 0000000..5700085 --- /dev/null +++ b/book/_templates/runestone_slides/console.html @@ -0,0 +1,13 @@ +{% extends "layout.html" %} + +{% block header %} +

+ + / + +
+{% endblock %} + +{%- block slide_container_class %}table{%- endblock %} + +{%- block presenter_notes %}
notes go here
{% endblock %} diff --git a/book/_templates/runestone_slides/layout.html b/book/_templates/runestone_slides/layout.html new file mode 100644 index 0000000..4a7dedb --- /dev/null +++ b/book/_templates/runestone_slides/layout.html @@ -0,0 +1,171 @@ +{# + basic/layout.html + ~~~~~~~~~~~~~~~~~ + + Master layout template for Sphinx themes. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +#} +{%- block doctype -%} + +{%- endblock %} +{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %} +{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %} +{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and + (sidebars != []) %} +{%- set url_root = pathto('', 1) %} +{# XXX necessary? #} +{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} +{%- if not embedded and docstitle %} + {%- set titlesuffix = " — "|safe + docstitle|e %} +{%- else %} + {%- set titlesuffix = "" %} +{%- endif %} + +{%- macro relbar() %} +{%- endmacro %} + +{%- macro sidebar() %} +{%- endmacro %} + +{%- macro script() %} + + {%- for scriptfile in script_files %} + + {%- endfor %} + {% if theme_custom_js %} + + {% endif %} + +{%- endmacro %} + +{%- macro css() %} + + + + {% if theme_custom_css %} + + {% endif %} + + + {%- for cssfile in css_files %} + + {%- endfor %} +{%- endmacro %} + + + + + {{ metatags }} + {%- block htmltitle %} + {{ title|striptags|e }}{{ titlesuffix }} + {%- endblock %} + {{ css() }} + + +
+ +{% block body %} {% endblock %} +
+{% block presenter_notes %}{% endblock %} + {%- if not embedded %} + {{ script() }} + {%- endif %} + + + + + + diff --git a/book/_templates/runestone_slides/static/common.js b/book/_templates/runestone_slides/static/common.js new file mode 100644 index 0000000..9ec85fa --- /dev/null +++ b/book/_templates/runestone_slides/static/common.js @@ -0,0 +1,129 @@ +var PERMANENT_URL_PREFIX = DOCUMENTATION_OPTIONS.URL_ROOT + '_static/'; + +var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next']; +var SLIDES_SELECTOR = 'section.slides > article'; + +var PM_TOUCH_SENSITIVITY = 15; +var TABLE_CLASS = 'table'; + +/* ---------------------------------------------------------------------- */ +/* classList polyfill by Eli Grey + * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */ + +if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) { + +(function (view) { + +var + classListProp = "classList" + , protoProp = "prototype" + , elemCtrProto = (view.HTMLElement || view.Element)[protoProp] + , objCtr = Object + strTrim = String[protoProp].trim || function () { + return this.replace(/^\s+|\s+$/g, ""); + } + , arrIndexOf = Array[protoProp].indexOf || function (item) { + for (var i = 0, len = this.length; i < len; i++) { + if (i in this && this[i] === item) { + return i; + } + } + return -1; + } + // Vendors: please allow content code to instantiate DOMExceptions + , DOMEx = function (type, message) { + this.name = type; + this.code = DOMException[type]; + this.message = message; + } + , checkTokenAndGetIndex = function (classList, token) { + if (token === "") { + throw new DOMEx( + "SYNTAX_ERR" + , "An invalid or illegal string was specified" + ); + } + if (/\s/.test(token)) { + throw new DOMEx( + "INVALID_CHARACTER_ERR" + , "String contains an invalid character" + ); + } + return arrIndexOf.call(classList, token); + } + , ClassList = function (elem) { + var + trimmedClasses = strTrim.call(elem.className) + , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [] + ; + for (var i = 0, len = classes.length; i < len; i++) { + this.push(classes[i]); + } + this._updateClassName = function () { + elem.className = this.toString(); + }; + } + , classListProto = ClassList[protoProp] = [] + , classListGetter = function () { + return new ClassList(this); + } +; +// Most DOMException implementations don't allow calling DOMException's toString() +// on non-DOMExceptions. Error's toString() is sufficient here. +DOMEx[protoProp] = Error[protoProp]; +classListProto.item = function (i) { + return this[i] || null; +}; +classListProto.contains = function (token) { + token += ""; + return checkTokenAndGetIndex(this, token) !== -1; +}; +classListProto.add = function (token) { + token += ""; + if (checkTokenAndGetIndex(this, token) === -1) { + this.push(token); + this._updateClassName(); + } +}; +classListProto.remove = function (token) { + token += ""; + var index = checkTokenAndGetIndex(this, token); + if (index !== -1) { + this.splice(index, 1); + this._updateClassName(); + } +}; +classListProto.toggle = function (token) { + token += ""; + if (checkTokenAndGetIndex(this, token) === -1) { + this.add(token); + } else { + this.remove(token); + } +}; +classListProto.toString = function () { + return this.join(" "); +}; + +if (objCtr.defineProperty) { + var classListPropDesc = { + get: classListGetter + , enumerable: true + , configurable: true + }; + try { + objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); + } catch (ex) { // IE 8 doesn't support enumerable:true + if (ex.number === -0x7FF5EC54) { + classListPropDesc.enumerable = false; + objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); + } + } +} else if (objCtr[protoProp].__defineGetter__) { + elemCtrProto.__defineGetter__(classListProp, classListGetter); +} + +}(self)); + +} +/* ---------------------------------------------------------------------- */ diff --git a/book/_templates/runestone_slides/static/console.css b/book/_templates/runestone_slides/static/console.css new file mode 100644 index 0000000..5ace6f5 --- /dev/null +++ b/book/_templates/runestone_slides/static/console.css @@ -0,0 +1,60 @@ +#controls { + text-align: center; + width: 100%; + margin: 10px; + font-size: 1.5em; + font-family: sans-serif; +} + +.slides.table > article { + display: inline-block; +} + +article.placeholder { + background: #ddd; +} + +.slides.table > article { + position: absolute; + left: 50%; + margin-left: -225px; +} + +.slides.table > article.past { + transform: translate(-325px); + -o-transform: translate(-325px); + -moz-transform: translate(-325px); + -webkit-transform: translate3d(-325px, 0, 0); + +} + +.slides.table > article.next { + transform: translate(475px); + -o-transform: translate(475px); + -moz-transform: translate(475px); + -webkit-transform: translate3d(475px, 0, 0); +} + +.slides > article.past, +.slides > article.next { + height: 230px; + width: 300px; + + margin-top: 60px; +} + +div.presenter_notes { + position: absolute; + top: 420px; + left: 10%; + background-color: white; + color: black; + padding: 1em; + width: 80%; + font-size: 130%; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} diff --git a/book/_templates/runestone_slides/static/console.js b/book/_templates/runestone_slides/static/console.js new file mode 100644 index 0000000..583b9a5 --- /dev/null +++ b/book/_templates/runestone_slides/static/console.js @@ -0,0 +1,91 @@ +document.addEventListener('DOMContentLoaded', function() { + + var + + handleKey = function(event) { + switch (event.keyCode) { + case 39: // right arrow + case 13: // Enter + case 32: // space + case 34: // PgDn + nextSlide(); + event.preventDefault(); + break; + + case 37: // left arrow + case 8: // Backspace + case 33: // PgUp + prevSlide(); + event.preventDefault(); + break; + } + }, + + handleUpdateSlides = function(slide_index, prev_slide, cur_slide, next_slide) { + document.querySelector('#cur_slide_num').innerHTML = Number(slide_index) + 1; + + // make sure we have a previous and next slide to show; + // if not add dummy placeholders + if (!prev_slide) { + prev_slide = '
'; + } + if (!next_slide) { + next_slide = '
'; + } + + document.querySelector('#slide_container').innerHTML = prev_slide + cur_slide + next_slide; + + // Copy the presenter notes into place + $('#presenter_notes').empty(); + $('article.current').find('div.admonition.note').each( + function(i, node) { + $('#presenter_notes').append($(node).html()); + } + ); + + var slides = document.querySelector('section.slides > article'); + for (var i=0; i < slides.length; i++) { + + } + }, + + handleMessage = function(e) { + switch (e.data.command) { + case 'num_slides': + document.querySelector('#num_slides').innerHTML = e.data.content; + break; + case 'cur_slide': + handleUpdateSlides(e.data.content, e.data.prev_slide, e.data.slide, e.data.next_slide); + break; + } + }, + + nextSlide = function(e) { + if (e) { + e.preventDefault(); + } + window.opener.postMessage({command: 'nextSlide'}, '*'); + }, + + prevSlide = function(e) { + if (e) { + e.preventDefault(); + } + + window.opener.postMessage({command: 'prevSlide'}, '*'); + }, + + init = function(e) { + window.addEventListener('message', handleMessage, false); + document.addEventListener('keydown', handleKey, false); + + document.querySelector('#next').addEventListener('click', nextSlide); + document.querySelector('#prev').addEventListener('click', prevSlide); + + window.opener.postMessage({command: 'register'}, '*'); + + }; + + init(); + + }, false); diff --git a/book/_templates/runestone_slides/static/controller.js b/book/_templates/runestone_slides/static/controller.js new file mode 100644 index 0000000..e5fda6b --- /dev/null +++ b/book/_templates/runestone_slides/static/controller.js @@ -0,0 +1,57 @@ +var SlideController = ( + function(){ + + var + slidedeck, + + onKeyDown = function (event) { + + switch (event.keyCode) { + case 39: // right arrow + case 13: // Enter + case 32: // space + case 34: // PgDn + slidedeck.nextSlide(); + event.preventDefault(); + break; + + case 37: // left arrow + case 8: // Backspace + case 33: // PgUp + slidedeck.prevSlide(); + event.preventDefault(); + break; + + case 40: // down arrow + if (isChromeVoxActive()) { + slidedeck.speakNextItem(); + } else { + slidedeck.nextSlide(); + } + event.preventDefault(); + break; + + case 38: // up arrow + if (isChromeVoxActive()) { + slidedeck.speakPrevItem(); + } else { + slidedeck.prevSlide(); + } + event.preventDefault(); + break; + + } + }; + + init = function(slides) { + slidedeck = slides; + + document.addEventListener('keydown', onKeyDown, false); + + }; + + return { + init: init + }; + + }()); diff --git a/book/_templates/runestone_slides/static/init.js b/book/_templates/runestone_slides/static/init.js new file mode 100644 index 0000000..6b436eb --- /dev/null +++ b/book/_templates/runestone_slides/static/init.js @@ -0,0 +1,2 @@ +SlideSync.init(SlideDeck); +SlideController.init(SlideSync); diff --git a/book/_templates/runestone_slides/static/runestone_slides.css b/book/_templates/runestone_slides/static/runestone_slides.css new file mode 100644 index 0000000..798288f --- /dev/null +++ b/book/_templates/runestone_slides/static/runestone_slides.css @@ -0,0 +1,7 @@ +.CodeMirror-lines { + line-height: 35px; +} + +.CodeMirror-gutter { + line-height: 35px; +} \ No newline at end of file diff --git a/book/_templates/runestone_slides/static/slides.css b/book/_templates/runestone_slides/static/slides.css new file mode 100644 index 0000000..cdfae7a --- /dev/null +++ b/book/_templates/runestone_slides/static/slides.css @@ -0,0 +1,47 @@ +img.fill { + position: absolute; + left: 0; + top: 0; + min-width: 100%; + min-height: 100%; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + z-index: -1; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.figure p.caption { + position: absolute; + left: 0; + bottom: 0; + font-size: 0.5em; +} + +.slide-no { + position: absolute; + bottom: 1ex; + right: 1em; + font-size: 66%; +} + +div.admonition.note { + visibility: hidden; + display: none; +} diff --git a/book/_templates/runestone_slides/static/slides.js b/book/_templates/runestone_slides/static/slides.js new file mode 100644 index 0000000..ea20cec --- /dev/null +++ b/book/_templates/runestone_slides/static/slides.js @@ -0,0 +1,548 @@ +/* + + Slide Presentation Javascript + (consumers should include commons.js as well) + + ----- + + Based on Google HTML5 slides template + + Original Authors: Luke Mahé (code) + Marcin Wichary (code and design) + + Dominic Mazzoni (browser compatibility) + Charles Chen (ChromeVox support) + + URL: http://code.google.com/p/html5slides/ + +*/ + +var SlideDeck = ( + function() { + +var +curSlide, +slide_console; + +/* Slide movement */ + +function getSlideEl(no) { + if ((no < 0) || (no >= slideEls.length)) { + return null; + } else { + return slideEls[no]; + } +}; + +function updateSlideClass(slideNo, className) { + var el = getSlideEl(slideNo); + + if (!el) { + return; + } + + if (className) { + el.classList.add(className); + } + + for (var i in SLIDE_CLASSES) { + if (className != SLIDE_CLASSES[i]) { + el.classList.remove(SLIDE_CLASSES[i]); + } + } +}; + + +function updateSlides() { + for (var i = 0; i < slideEls.length; i++) { + switch (i) { + case curSlide - 2: + updateSlideClass(i, 'far-past'); + break; + case curSlide - 1: + updateSlideClass(i, 'past'); + break; + case curSlide: + updateSlideClass(i, 'current'); + break; + case curSlide + 1: + updateSlideClass(i, 'next'); + break; + case curSlide + 2: + updateSlideClass(i, 'far-next'); + break; + default: + updateSlideClass(i); + break; + } + } + + triggerLeaveEvent(curSlide - 1); + triggerEnterEvent(curSlide); + + window.setTimeout(function() { + // Hide after the slide + disableSlideFrames(curSlide - 2); + }, 301); + + enableSlideFrames(curSlide - 1); + enableSlideFrames(curSlide + 2); + + if (isChromeVoxActive()) { + speakAndSyncToNode(slideEls[curSlide]); + } + + updateHash(); + $(document).trigger('slidesSized'); + + // notifyListeners( + // {command: 'cur_slide', + // content: curSlide, + // prev_slide: curSlide > 0 ? getSlideEl(curSlide - 1).outerHTML : '', + // slide: getSlideEl(curSlide).outerHTML, + // next_slide: curSlide < slideEls.length - 1 ? getSlideEl(curSlide + 1).outerHTML : '' + // } + // ); + +}; + +function buildNextItem() { + var toBuild = slideEls[curSlide].querySelectorAll('.to-build'); + + if (!toBuild.length) { + return false; + } + + toBuild[0].classList.remove('to-build'); + + if (isChromeVoxActive()) { + speakAndSyncToNode(toBuild[0]); + } + + return true; +}; + + +function prevSlide() { + if (slidesContainer.classList.contains(TABLE_CLASS)) return; + + if (curSlide > 0) { + curSlide--; + + updateSlides(); + } +}; + +function nextSlide() { + if (slidesContainer.classList.contains(TABLE_CLASS)) return; + + if (buildNextItem()) { + return; + } + + if (curSlide < slideEls.length - 1) { + curSlide++; + + updateSlides(); + } +}; + +function showSlide(e) { + + if (!slidesContainer.classList.contains(TABLE_CLASS)) return; + + // toggle table class + toggleView(); + + // set curSlide + if (e) { + for (i = 0; i < slideEls.length; i++) { + if (slideEls[i].contains(e.target)) { + curSlide = i; + break; + } + } + } + + // update slide classes + updateSlides(); +}; + +function toggleView() { + for (var i = 0; i < slideEls.length; i++) { + updateSlideClass(i); + }; + + if (slidesContainer.classList.contains(TABLE_CLASS)) { + // leaving table mode + updateSlides(); + } + + slidesContainer.classList.toggle(TABLE_CLASS); + $(document).trigger('slidesSized'); +}; + + +/* Slide events */ + +function triggerEnterEvent(no) { + var el = getSlideEl(no); + if (!el) { + return; + } + + var onEnter = el.getAttribute('onslideenter'); + if (onEnter) { + new Function(onEnter).call(el); + } + + var evt = document.createEvent('Event'); + evt.initEvent('slideenter', true, true); + evt.slideNumber = no + 1; // Make it readable + + el.dispatchEvent(evt); +}; + +function triggerLeaveEvent(no) { + var el = getSlideEl(no); + if (!el) { + return; + } + + var onLeave = el.getAttribute('onslideleave'); + if (onLeave) { + new Function(onLeave).call(el); + } + + var evt = document.createEvent('Event'); + evt.initEvent('slideleave', true, true); + evt.slideNumber = no + 1; // Make it readable + + el.dispatchEvent(evt); +}; + +/* Touch events */ + +function handleTouchStart(event) { + if (event.touches.length == 1) { + touchDX = 0; + touchDY = 0; + + touchStartX = event.touches[0].pageX; + touchStartY = event.touches[0].pageY; + + document.body.addEventListener('touchmove', handleTouchMove, true); + document.body.addEventListener('touchend', handleTouchEnd, true); + } +}; + +function handleTouchMove(event) { + if (event.touches.length > 1) { + cancelTouch(); + } else { + touchDX = event.touches[0].pageX - touchStartX; + touchDY = event.touches[0].pageY - touchStartY; + } +}; + +function handleTouchEnd(event) { + var dx = Math.abs(touchDX); + var dy = Math.abs(touchDY); + + if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) { + if (touchDX > 0) { + prevSlide(); + } else { + nextSlide(); + } + } + + cancelTouch(); +}; + +function cancelTouch() { + document.body.removeEventListener('touchmove', handleTouchMove, true); + document.body.removeEventListener('touchend', handleTouchEnd, true); +}; + +/* Preloading frames */ + +function disableSlideFrames(no) { + var el = getSlideEl(no); + if (!el) { + return; + } + + var frames = el.getElementsByTagName('iframe'); + for (var i = 0, frame; frame = frames[i]; i++) { + disableFrame(frame); + } +}; + +function enableSlideFrames(no) { + var el = getSlideEl(no); + if (!el) { + return; + } + + var frames = el.getElementsByTagName('iframe'); + for (var i = 0, frame; frame = frames[i]; i++) { + enableFrame(frame); + } +}; + +function disableFrame(frame) { + frame.src = 'about:blank'; +}; + +function enableFrame(frame) { + var src = frame._src; + + if (frame.src != src && src != 'about:blank') { + frame.src = src; + } +}; + +function setupFrames() { + var frames = document.querySelectorAll('iframe'); + for (var i = 0, frame; frame = frames[i]; i++) { + frame._src = frame.src; + disableFrame(frame); + } + + enableSlideFrames(curSlide); + enableSlideFrames(curSlide + 1); + enableSlideFrames(curSlide + 2); +}; + +function setupInteraction() { + /* Clicking and tapping */ + + var el = document.createElement('div'); + el.className = 'slide-area'; + el.id = 'prev-slide-area'; + el.addEventListener('click', prevSlide, false); + document.querySelector('section.slides').appendChild(el); + + var el = document.createElement('div'); + el.className = 'slide-area'; + el.id = 'next-slide-area'; + el.addEventListener('click', nextSlide, false); + document.querySelector('section.slides').appendChild(el); + + /* Swiping */ + + document.body.addEventListener('touchstart', handleTouchStart, false); + + /* Clicking Slides */ + for (i = 0; i < slideEls.length; i++) { + slideEls[i].addEventListener('click', showSlide, false); + } + +} + +/* ChromeVox support */ + +function isChromeVoxActive() { + if (typeof(cvox) == 'undefined') { + return false; + } else { + return true; + } +}; + +function speakAndSyncToNode(node) { + if (!isChromeVoxActive()) { + return; + } + + cvox.ChromeVox.navigationManager.switchToStrategy( + cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true); + cvox.ChromeVox.navigationManager.syncToNode(node); + cvox.ChromeVoxUserCommands.finishNavCommand(''); + var target = node; + while (target.firstChild) { + target = target.firstChild; + } + cvox.ChromeVox.navigationManager.syncToNode(target); +}; + +function speakNextItem() { + if (!isChromeVoxActive()) { + return; + } + + cvox.ChromeVox.navigationManager.switchToStrategy( + cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true); + cvox.ChromeVox.navigationManager.next(true); + if (!cvox.DomUtil.isDescendantOfNode( + cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){ + var target = slideEls[curSlide]; + while (target.firstChild) { + target = target.firstChild; + } + cvox.ChromeVox.navigationManager.syncToNode(target); + cvox.ChromeVox.navigationManager.next(true); + } + cvox.ChromeVoxUserCommands.finishNavCommand(''); +}; + +function speakPrevItem() { + if (!isChromeVoxActive()) { + return; + } + + cvox.ChromeVox.navigationManager.switchToStrategy( + cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true); + cvox.ChromeVox.navigationManager.previous(true); + if (!cvox.DomUtil.isDescendantOfNode( + cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){ + var target = slideEls[curSlide]; + while (target.lastChild){ + target = target.lastChild; + } + cvox.ChromeVox.navigationManager.syncToNode(target); + cvox.ChromeVox.navigationManager.previous(true); + } + cvox.ChromeVoxUserCommands.finishNavCommand(''); +}; + +/* Hash functions */ + +function findSlideById(title_id) { + // Return the 1-base index of the Slide with id ``title_id`` + // + // The index must be 1-based, as it's passed to code which assumes + // it was specified as the location fragment. + + for (var i = 0; i < slideEls.length; i++) { + if (slideEls.item(i).id == title_id) { + return i + 1; + } + } + + // no match on a slide, perhaps it's an explicit reference? + var + target_link = document.querySelector("span[id='" + title_id + "']"), + // XXX this is pretty strict, may need to be more flexible in the future + slide = (target_link && target_link.parentNode); + + if (slide && slide.tagName == 'ARTICLE') { + return findSlideById(slide.id); + } + + return false; + +}; + +function getCurSlideFromHash() { + var slideNo = Number(location.hash.substr(1)); + + if (isNaN(slideNo)) { + // must be a section title reference + slideNo = findSlideById(location.hash.substr(1)); + } + + if (slideNo) { + curSlide = slideNo - 1; + } else { + curSlide = 0; + } +}; + +function updateHash() { + location.replace('#' + (curSlide + 1)); +}; + +/* Event listeners */ + + + + +function addEventListeners() { + +}; + +/* Initialization */ + +function addGeneralStyle() { + var el = document.createElement('meta'); + el.name = 'viewport'; + el.content = 'width=1100,height=750'; + document.querySelector('head').appendChild(el); + + var el = document.createElement('meta'); + el.name = 'apple-mobile-web-app-capable'; + el.content = 'yes'; + document.querySelector('head').appendChild(el); +}; + +function makeBuildLists() { + for (var i = curSlide, slide; slide = slideEls[i]; i++) { + var items = slide.querySelectorAll('.build > *'); + for (var j = 0, item; item = items[j]; j++) { + if (item.classList) { + item.classList.add('to-build'); + } + } + } +}; + +function handleDomLoaded() { + slidesContainer = document.querySelector('section.slides'); + slideEls = document.querySelectorAll(SLIDES_SELECTOR); + + getCurSlideFromHash(); + setupFrames(); + + addGeneralStyle(); + addEventListeners(); + + updateSlides(); + + setupInteraction(); + makeBuildLists(); + + document.body.classList.add('loaded'); + $(document).trigger('slidesSized'); +}; + + + var + + getLocation = function () { + return curSlide; + }, + + setLocation = function (slide) { + curSlide = slide; + updateSlides(); + }, + + getLength = function () { + return slideEls.length; + }, + + init = function () { + document.addEventListener('DOMContentLoaded', handleDomLoaded, false); + }; + + + init(); + + return { + curSlide: getLocation, + location: getLocation, + setLocation: setLocation, + + toggleView: toggleView, + + length: getLength, + + getSlideEl: getSlideEl, + + nextSlide: nextSlide, + prevSlide: prevSlide + }; + + }()); diff --git a/book/_templates/runestone_slides/static/styles.css b/book/_templates/runestone_slides/static/styles.css new file mode 100644 index 0000000..0e77adc --- /dev/null +++ b/book/_templates/runestone_slides/static/styles.css @@ -0,0 +1,723 @@ +@import url(fonts/stylesheet.css); + +/* + Google HTML5 slides template + + Authors: Luke Mahé (code) + Marcin Wichary (code and design) + + Dominic Mazzoni (browser compatibility) + Charles Chen (ChromeVox support) + + URL: http://code.google.com/p/html5slides/ +*/ + +/* Framework */ + +html { + height: 100%; +} + +body { + margin: 0; + padding: 0; + + display: block !important; + + height: 100%; + min-height: 740px; + + overflow-x: hidden; + overflow-y: auto; + + background: rgb(215, 215, 215); + background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190)); + background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190)); + background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190)); + background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190))); + + -webkit-font-smoothing: antialiased; +} + +.slides { + width: 100%; + height: 100%; + left: 0; + + position: absolute; + + -webkit-transform: translate3d(0, 0, 0); +} + +.slides > article { + display: block; + + position: absolute; + overflow: hidden; + + width: 900px; + height: 700px; + + left: 50%; + top: 50%; + + margin-left: -450px; + margin-top: -350px; + + padding: 40px 60px; + + box-sizing: border-box; + -o-box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + background-color: white; + + box-shadow: 0 2px 6px rgba(0, 0, 0, .1); + border: 1px solid rgba(0, 0, 0, .3); + + transition: transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + -moz-transition: -moz-transform .3s ease-out; + -webkit-transition: -webkit-transform .3s ease-out; +} +.slides.layout-widescreen > article { + margin-left: -550px; + width: 1100px; +} +.slides.layout-faux-widescreen > article { + margin-left: -550px; + width: 1100px; + + padding: 40px 160px; +} + +.slides.layout-widescreen > article:not(.nobackground):not(.biglogo), +.slides.layout-faux-widescreen > article:not(.nobackground):not(.biglogo) { + background-position-x: 0, 840px; +} + +.slides > article.appear { + transition: none; + display: none; +} + +.slides > article.fade-in { + transition: opacity 0.2s; +} + +.slides > article.fade-in.current { + z-index: 100; +} + +.slides .handout { + display: none; +} + +.slides.table { + font-size: 15px; + padding: 10px; +} + +.slides.table > .slide-area { + display: none; +} + +.slides.table > article:hover { + -moz-box-shadow: 0px 0px 20px yellow; + -webkit-box-shadow: 0px 0px 20px yellow; + box-shadow: 0px 0px 20px yellow; + border: 2px; +} + +.slides.table > article { + display: block; + float: left; + position: relative; + overflow: hidden; + + width: 450px; + height: 350px; + + left: 0; + top: 0; + + margin: 10px; + + padding: 20px 30px; + + box-sizing: border-box; + -o-box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + box-shadow: 0 2px 6px rgba(0, 0, 0, .1); + border: 1px solid rgba(0, 0, 0, .3); + + /* transform: scale(0.5); */ + /* -webkit-transform: scale(0.5); */ + transition: width height .3s ease-out; + -o-transition: -o-transform .3s ease-out; + -moz-transition: -moz-transform .3s ease-out; + -webkit-transition: width height .3s ease-out; +} + +.slides.table > article, +.slides.table > article.next, +.slides.table > article.far-past, +.slides.table > article.past, +.slides.table > article.current, +.slides.table > article.far-next { + display: block; + transform: translate(0px); + -o-transform: translate(0px); + -moz-transform: translate(0px); + -webkit-transform: translate(0px); +} + +.slides.table > article .to-build { + opacity: 100; +} + +/* Clickable/tappable areas */ + +.slide-area { + z-index: 1000; + + position: absolute; + left: 0; + top: 0; + width: 150px; + height: 700px; + + left: 50%; + top: 50%; + + cursor: pointer; + margin-top: -350px; + + tap-highlight-color: transparent; + -o-tap-highlight-color: transparent; + -moz-tap-highlight-color: transparent; + -webkit-tap-highlight-color: transparent; +} +#prev-slide-area { + margin-left: -550px; +} +#next-slide-area { + margin-left: 400px; +} +.slides.layout-widescreen #prev-slide-area, +.slides.layout-faux-widescreen #prev-slide-area { + margin-left: -650px; +} +.slides.layout-widescreen #next-slide-area, +.slides.layout-faux-widescreen #next-slide-area { + margin-left: 500px; +} + +/* Slides */ + +.slides > article { + display: none; +} +.slides > article.far-past { + display: block; + transform: translate(-2040px); + -o-transform: translate(-2040px); + -moz-transform: translate(-2040px); + -webkit-transform: translate3d(-2040px, 0, 0); +} +.slides > article.past { + display: block; + transform: translate(-1020px); + -o-transform: translate(-1020px); + -moz-transform: translate(-1020px); + -webkit-transform: translate3d(-1020px, 0, 0); +} +.slides > article.current { + display: block; + opacity: 1; + transform: translate(0); + -o-transform: translate(0); + -moz-transform: translate(0); + -webkit-transform: translate3d(0, 0, 0); +} +.slides > article.next { + display: block; + transform: translate(1020px); + -o-transform: translate(1020px); + -moz-transform: translate(1020px); + -webkit-transform: translate3d(1020px, 0, 0); +} +.slides > article.far-next { + display: block; + transform: translate(2040px); + -o-transform: translate(2040px); + -moz-transform: translate(2040px); + -webkit-transform: translate3d(2040px, 0, 0); +} + +.slides.layout-widescreen > article.far-past, +.slides.layout-faux-widescreen > article.far-past { + display: block; + transform: translate(-2260px); + -o-transform: translate(-2260px); + -moz-transform: translate(-2260px); + -webkit-transform: translate3d(-2260px, 0, 0); +} +.slides.layout-widescreen > article.past, +.slides.layout-faux-widescreen > article.past { + display: block; + transform: translate(-1130px); + -o-transform: translate(-1130px); + -moz-transform: translate(-1130px); + -webkit-transform: translate3d(-1130px, 0, 0); +} +.slides.layout-widescreen > article.current, +.slides.layout-faux-widescreen > article.current { + display: block; + transform: translate(0); + -o-transform: translate(0); + -moz-transform: translate(0); + -webkit-transform: translate3d(0, 0, 0); +} +.slides.layout-widescreen > article.next, +.slides.layout-faux-widescreen > article.next { + display: block; + transform: translate(1130px); + -o-transform: translate(1130px); + -moz-transform: translate(1130px); + -webkit-transform: translate3d(1130px, 0, 0); +} +.slides.layout-widescreen > article.far-next, +.slides.layout-faux-widescreen > article.far-next { + display: block; + transform: translate(2260px); + -o-transform: translate(2260px); + -moz-transform: translate(2260px); + -webkit-transform: translate3d(2260px, 0, 0); +} + +.slides > article.fade-in.next, +.slides > article.fade-in.far-past, +.slides > article.fade-in.past, +.slides > article.fade-in.far-next { + opacity: 0; + transform: translate(0px); + -o-transform: translate(0px); + -moz-transform: translate(0px); + -webkit-transform: translate(0px); +} + +.slides > article.appear.next, +.slides > article.appear.far-past, +.slides > article.appear.past, +.slides > article.appear.far-next { + display: none; + transform: translate(0px); + -o-transform: translate(0px); + -moz-transform: translate(0px); + -webkit-transform: translate(0px); +} + + +/* Styles for slides */ + +.slides { + font-size: 30px; +} + +.slides > article { + font-family: 'Open Sans', Arial, sans-serif; + + color: rgb(102, 102, 102); + text-shadow: 0 1px 1px rgba(0, 0, 0, .1); + + font-size: 1em; + line-height: 1.2em; + + letter-spacing: -1px; +} + +b { + font-weight: 600; +} + +.blue { + color: rgb(0, 102, 204); +} +.yellow { + color: rgb(255, 211, 25); +} +.green { + color: rgb(0, 138, 53); +} +.red { + color: rgb(255, 0, 0); +} +.black { + color: black; +} +.white { + color: white; +} + +a { + color: rgb(0, 102, 204); +} +a:visited { + color: rgba(0, 102, 204, .75); +} +a:hover { + color: black; +} + +p { + margin: 0; + padding: 0; + + margin-top: 20px; +} +p:first-child { + margin-top: 0; +} + +h1 { + font-size: 2em; + line-height: 1em; + + padding: 0; + margin: 0; + margin-top: 200px; + padding-right: 40px; + + font-weight: 600; + + letter-spacing: -3px; + + color: rgb(51, 51, 51); +} + +h2 { + font-size: 1.5em; + line-height: 1em; + + position: absolute; + bottom: 150px; + + padding: 0; + margin: 0; + padding-right: 40px; + + font-weight: 600; + + letter-spacing: -2px; + + color: rgb(51, 51, 51); +} + +h3 { + font-size: 1em; + line-height: 1.2em; + + padding: 0; + margin: 0; + padding-right: 40px; + + font-weight: 600; + + letter-spacing: -1px; + + color: rgb(51, 51, 51); +} + +article.fill h3 { + background: rgba(255, 255, 255, .75); + padding-top: .2em; + padding-bottom: .3em; + margin-top: -.2em; + margin-left: -60px; + padding-left: 60px; + margin-right: -60px; + padding-right: 60px; +} + +ul { + list-style: none; + margin: 0; + padding: 0; + + margin-top: 40px; + + margin-left: .75em; +} +ul ul { + margin-top: .5em; +} +li { + padding: 0; + margin: 0; + + margin-bottom: .5em; +} +ul li::before { + content: '·'; + + width: .75em; + margin-left: -.75em; + + position: absolute; +} + +pre { + font-family: 'Droid Sans Mono', 'Courier New', monospace; + + font-size: 0.66em; + line-height: 1.4em; + padding: 5px 10px; + + letter-spacing: -1px; + + margin-top: 40px; + margin-bottom: 40px; + + color: black; + background: rgb(240, 240, 240); + border: 1px solid rgb(224, 224, 224); + box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1); + + overflow: hidden; +} + +code { + font-size: 95%; + font-family: 'Droid Sans Mono', 'Courier New', monospace; + + color: black; +} + +iframe { + width: 100%; + + height: 620px; + + background: white; + border: 1px solid rgb(192, 192, 192); + margin: -1px; + /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/ +} + +h3 + iframe { + margin-top: 40px; + height: 540px; +} + +article.fill iframe { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + + border: 0; + margin: 0; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + z-index: -1; +} + +article.fill img { + position: absolute; + left: 0; + top: 0; + min-width: 100%; + min-height: 100%; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + + z-index: -1; +} +img.centered { + margin: 0 auto; + display: block; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 40px; +} +th { + font-weight: 600; + text-align: left; +} +td, +th { + border: 1px solid rgb(224, 224, 224); + padding: 5px 10px; + vertical-align: top; +} + +.source { + position: absolute; + left: 60px; + top: 644px; + padding-right: 175px; + + font-size: 0.5em; + letter-spacing: 0; + line-height: 18px; +} + +q { + display: block; + font-size: 2em; + line-height: 72px; + + margin-left: 20px; + + margin-top: 100px; + margin-right: 150px; +} +q::before { + content: '“'; + + position: absolute; + display: inline-block; + margin-left: -2.1em; + width: 2em; + text-align: right; + + font-size: 3em; + color: rgb(192, 192, 192); +} +q::after { + content: '”'; + + position: absolute; + margin-left: .1em; + + font-size: 3em; + color: rgb(192, 192, 192); +} +div.author { + text-align: right; + font-size: 1.33em; + + margin-top: 20px; + margin-right: 150px; +} +div.author::before { + content: '—'; +} + +/* Size variants */ + +article.smaller p, +article.smaller ul { + font-size: 0.66em; + line-height: 1.2em; + letter-spacing: 0; +} +article.smaller table { + font-size: 0.66em; + line-height: 1.2em; + letter-spacing: 0; +} +article.smaller pre { + font-size: 0.5em; + line-height: 1.33em; + letter-spacing: 0; +} +article.smaller q { + font-size: 1.33em; + line-height: 1.2em; +} +article.smaller q::before, +article.smaller q::after { + font-size: 2em; +} + +/* Builds */ + +.build > * { + transition: opacity 0.5s ease-in-out 0.2s; + -o-transition: opacity 0.5s ease-in-out 0.2s; + -moz-transition: opacity 0.5s ease-in-out 0.2s; + -webkit-transition: opacity 0.5s ease-in-out 0.2s; +} + +.to-build { + opacity: 0; +} + +/* Pretty print */ + +.prettyprint .str, /* string content */ +.prettyprint .atv { /* a markup attribute value */ + color: rgb(0, 138, 53); +} +.prettyprint .kwd, /* a keyword */ +.prettyprint .tag { /* a markup tag name */ + color: rgb(0, 102, 204); +} +.prettyprint .com { /* a comment */ + color: rgb(127, 127, 127); + font-style: italic; +} +.prettyprint .lit { /* a literal value */ + color: rgb(127, 0, 0); +} +.prettyprint .pun, /* punctuation, lisp open bracket, lisp close bracket */ +.prettyprint .opn, +.prettyprint .clo { + color: rgb(127, 127, 127); +} +.prettyprint .typ, /* a type name */ +.prettyprint .atn, /* a markup attribute name */ +.prettyprint .dec, +.prettyprint .var { /* a declaration; a variable name */ + color: rgb(127, 0, 127); +} + +@media print { + + .slides > article, + .slides > article.far-past, + .slides > article.past, + .slides > article.next, + .slides > article.far-next { + + position: static; + overflow: hidden; + display: block !important; + + margin: auto; + page-break-after: always; + page-break-inside: avoid; + + transform: none; + -o-transform: none; + -moz-transform: none; + -webkit-transform: none; + } + +} diff --git a/book/_templates/runestone_slides/static/sync.js b/book/_templates/runestone_slides/static/sync.js new file mode 100644 index 0000000..8319161 --- /dev/null +++ b/book/_templates/runestone_slides/static/sync.js @@ -0,0 +1,129 @@ +var SlideSync = ( + function() { + + var + slides, + slide_listeners = [], + + showConsole = function(e) { + slide_console = window.open( + DOCUMENTATION_OPTIONS.URL_ROOT + 'console.html', + 'console', + "menubar=no,location=no,resizable=yes,scrollbars=yes,status=yes"); + }, + + nextSlide = function() { + slides.nextSlide(); + + sendCommand('nextSlide'); + sendCurSlide(); + }, + + prevSlide = function() { + slides.prevSlide(); + + sendCommand('prevSlide'); + sendCurSlide(); + }, + + sendCurSlide = function() { + + var curSlide = slides.curSlide(); + + notifyListeners( + {command: 'cur_slide', + content: curSlide, + prev_slide: curSlide > 0 ? slides.getSlideEl(curSlide - 1).outerHTML : '', + slide: slides.getSlideEl(curSlide).outerHTML, + next_slide: curSlide < slides.length() - 1 ? slides.getSlideEl(curSlide + 1).outerHTML : '' + } + ); + + }, + + notifyListeners = function (message) { + + for (var i = 0; i < slide_listeners.length; i++) { + slide_listeners[i].postMessage(message, '*'); + } + + }, + + sendCommand = function(command) { + return sendMessage({'command':command}); + }, + + sendMessage = function(message) { + notifyListeners(message); + }, + + handleMessage = function(message, source) { + + console.log(message); + + switch (message.command) { + + case 'register': + slide_listeners.push(source); + sendMessage( + {command: 'num_slides', + content: slideEls.length + } + ); + break; + + case 'nextSlide': + slides.nextSlide(); + break; + + case 'prevSlide': + slides.prevSlide(); + break; + + }; + + sendCurSlide(); + + }, + + onKeyDown = function (event) { + + switch (event.keyCode) { + + case 84: // t + slides.toggleView && slides.toggleView(); + break; + + case 67: // c + showConsole(); + break; + } + }, + + init = function(slidedeck) { + slides = slidedeck; + + // attach event handlers + document.addEventListener('keydown', onKeyDown, false); + window.addEventListener( + 'message', + function(e) { + return handleMessage(e.data, e.source); + }, false); + + }; + + + return { + init: init, + showConsole: showConsole, + + nextSlide: nextSlide, + prevSlide: prevSlide, + + handleMessage: handleMessage, + sendMessage: sendMessage, + sendCommand: sendCommand + }; + + }()); \ No newline at end of file diff --git a/book/_templates/runestone_slides/static/theme.css b/book/_templates/runestone_slides/static/theme.css new file mode 100644 index 0000000..ba0589f --- /dev/null +++ b/book/_templates/runestone_slides/static/theme.css @@ -0,0 +1,3 @@ +a.headerlink { + display: none; +} \ No newline at end of file diff --git a/book/_templates/runestone_slides/theme.conf b/book/_templates/runestone_slides/theme.conf new file mode 100644 index 0000000..180ce21 --- /dev/null +++ b/book/_templates/runestone_slides/theme.conf @@ -0,0 +1,7 @@ +[theme] +inherit = basic +stylesheet = slides.css + +[options] +custom_css = runestone_slides.css +custom_js = diff --git a/book/_templates/sphinx_bootstrap/globaltoc.html b/book/_templates/sphinx_bootstrap/globaltoc.html new file mode 100644 index 0000000..b27d3ac --- /dev/null +++ b/book/_templates/sphinx_bootstrap/globaltoc.html @@ -0,0 +1,7 @@ + diff --git a/book/_templates/sphinx_bootstrap/layout.html b/book/_templates/sphinx_bootstrap/layout.html new file mode 100644 index 0000000..49eb371 --- /dev/null +++ b/book/_templates/sphinx_bootstrap/layout.html @@ -0,0 +1,316 @@ +{% extends "basic/layout.html" %} + +{% set script_files = script_files + [ + '_static/jquery-ui-1.10.3.custom.min.js', + '_static/jquery-fix.js', + '_static/bootstrap-3.0.0/js/bootstrap.min.js', + '_static/bootstrap-sphinx.js', + '_static/waypoints.min.js', + '_static/rangy-core.js', + '_static/rangy-textrange.js', + '_static/rangy-cssclassapplier.js', + '_static/user-highlights.js', + '_static/jquery.idle-timer.js', + '_static/processing-1.4.1.min.js', + '_static/jquery.hotkey.js' + ] +%} + +{% set css_files = ['_static/bootstrap-3.0.0/css/bootstrap.min.css'] + css_files %} +{% if theme_bootswatch_theme %} + {% set css_files = css_files + + ['http://netdna.bootstrapcdn.com/bootswatch/2.3.1/' + theme_bootswatch_theme + '/bootstrap.min.css'] + %} +{% endif %} + +{% set css_files = css_files + [ + '_static/jquery-ui-1.10.3.custom.min.css', + '_static/bootstrap-sphinx.css', + '_static/user-highlights.css', + '_static/runestone-custom-sphinx-bootstrap.css', + ] +%} + +{%- block doctype -%} + +{%- endblock %} + +{# Sidebar: Rework into our Boostrap nav section. #} +{% macro navBar() %} + + + +{% endmacro %} + +{%- block extrahead %} + + + + + +
+ + +{% endblock %} + +{# Silence the sidebar's, relbar's #} +{% block header %}{% endblock %} +{% block sidebar1 %}{% endblock %} +{% block sidebar2 %}{% endblock %} +{% block relbar1 %}{% endblock %} +{% block relbar2 %}{% endblock %} +{% block sidebarsourcelink %}{% endblock %} + +{%- block content %} +{{ navBar() }} + +
+ {% block body %}{% endblock %} +
+{%- endblock %} + +{%- block footer %} +
+
+

+ readers online now | | Back to top + {% if theme_source_link_position == "footer" %} +
+ {% include "sourcelink.html" %} + {% endif %} +

+

+ {%- if show_copyright %} + {%- if hasdoc('copyright') %} + {% trans path=pathto('copyright'), copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} + {%- else %} + {% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} + {%- endif %} + {%- endif %} + {%- if last_updated %} + {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
+ {%- endif %} + {%- if show_sphinx %} + {% trans sphinx_version=sphinx_version|e %}Created using Sphinx {{ sphinx_version }}.{% endtrans %} + {%- endif %} +

+
+
+ + + + + +{% if appname == "runestone" %} + +{% endif %} + +{% endblock %} diff --git a/book/_templates/sphinx_bootstrap/localtoc.html b/book/_templates/sphinx_bootstrap/localtoc.html new file mode 100644 index 0000000..2041c5c --- /dev/null +++ b/book/_templates/sphinx_bootstrap/localtoc.html @@ -0,0 +1,4 @@ + diff --git a/book/_templates/sphinx_bootstrap/relations.html b/book/_templates/sphinx_bootstrap/relations.html new file mode 100644 index 0000000..43cc37f --- /dev/null +++ b/book/_templates/sphinx_bootstrap/relations.html @@ -0,0 +1,30 @@ +{%- if prev %} +
  • + + + +
  • + {% if not next %} +
  • + {% endif %} + +{%- endif %} + +{%- if next %} +
  • + + + +
  • +
  • +{%- endif %} + + diff --git a/book/_templates/sphinx_bootstrap/sourcelink.html b/book/_templates/sphinx_bootstrap/sourcelink.html new file mode 100644 index 0000000..154f7c7 --- /dev/null +++ b/book/_templates/sphinx_bootstrap/sourcelink.html @@ -0,0 +1,4 @@ +{%- if show_source and has_source and sourcename %} + {{ _('Source') }} +{%- endif %} diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/css/bootstrap.min.css b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/css/bootstrap.min.css new file mode 100644 index 0000000..a553c4f --- /dev/null +++ b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..87eaa434234e2a984c261e0450a2f4ad837aa7b4 GIT binary patch literal 14079 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 literal 0 HcmV?d00001 diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.svg b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..5fee068 --- /dev/null +++ b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..be784dc1d5bcb92ab155f578f3723524a3dd9688 GIT binary patch literal 29512 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 DlhOCh literal 0 HcmV?d00001 diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff b/book/_templates/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..2cc3e4852a5a42e6aadd6284e067b66e14a57bc7 GIT binary patch literal 16448 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.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}this.sliding=!0,f&&this.pause();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)}).emulateTransitionEnd(600)}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?(this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350),void 0):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(c).is("body")?a(window):a(c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#\w/.test(e)&&a(e);return f&&f.length&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top()),"function"==typeof h&&(h=f.bottom());var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;this.affixed!==i&&(this.unpin&&this.$element.css("top",""),this.affixed=i,this.unpin="bottom"==i?e.top-d:null,this.$element.removeClass(b.RESET).addClass("affix"+(i?"-"+i:"")),"bottom"==i&&this.$element.offset({top:document.body.offsetHeight-h-this.$element.height()}))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery); \ No newline at end of file diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.css_t b/book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.css_t new file mode 100644 index 0000000..d8d8e94 --- /dev/null +++ b/book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.css_t @@ -0,0 +1,57 @@ +/* +* bootstrap-sphinx.css +* ~~~~~~~~~~~~~~~~~~~~ +* +* Sphinx stylesheet -- Twitter Bootstrap theme. +*/ + +.navbar-inverse .brand { + color: #FFF; +} + +.page-top { + top: 0px; +} + +{% if theme_navbar_fixed_top == 'true' %} +body { +{% if theme_bootswatch_theme %} + padding-top: 50px; +{% else %} + padding-top: 40px; +{% endif %} +} +.page-top { +{% if theme_bootswatch_theme %} + top: 50px; +{% else %} + top: 40px; +{% endif %} +} + +.navbar-inner { + padding-left: 12px !important; + padding-right: 12px !important; +} +{% endif %} + +{%- block sidebarlogo %} + {%- if logo %} +@media (min-width: 980px) { + .navbar h3 a, .navbar .brand { + background: transparent url("{{ logo }}") no-repeat 22px 3px; + padding-left: 62px; + } +} + {%- endif %} +{%- endblock %} + +table { + border: 0; +} + +.footer { + width: 100%; + border-top: 1px solid #ccc; + padding-top: 10px; +} diff --git a/book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.js b/book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.js new file mode 100644 index 0000000..41afcaa --- /dev/null +++ b/book/_templates/sphinx_bootstrap/static/bootstrap-sphinx.js @@ -0,0 +1,132 @@ +(function ($) { + /** + * Patch TOC list. + * + * Will mutate the underlying span to have a correct ul for nav. + * + * @param $span: Span containing nested UL's to mutate. + * @param minLevel: Starting level for nested lists. (1: global, 2: local). + */ + var patchToc = function ($ul, minLevel) { + var findA, + patchTables, + $localLi; + + // Find all a "internal" tags, traversing recursively. + findA = function ($elem, level) { + level = level || 0; + var $items = $elem.find("> li > a.internal, > ul, > li > ul"); + + // Iterate everything in order. + $items.each(function (index, item) { + var $item = $(item), + tag = item.tagName.toLowerCase(), + $childrenLi = $item.children('li'), + $parentLi = $($item.parent('li'), $item.parent().parent('li')); + + // Add dropdowns if more children and above minimum level. + if (tag === 'ul' && level >= minLevel && $childrenLi.length > 0) { + $parentLi + .addClass('dropdown-submenu') + .children('a').first().attr('tabindex', -1); + + $item.addClass('dropdown-menu'); + } + + findA($item, level + 1); + }); + }; + + findA($ul); + }; + + /** + * Patch all tables to remove ``docutils`` class and add Bootstrap base + * ``table`` class. + */ + patchTables = function () { + $("table.docutils") + .removeClass("docutils") + .addClass("table") + .attr("border", 0); + }; + + $(document).ready(function () { + + /* + * Scroll the window to avoid the topnav bar + * https://github.com/twitter/bootstrap/issues/1768 + */ + if ($("#navbar.navbar-fixed-top").length > 0) { + var navHeight = $("#navbar").height(), + shiftWindow = function() { scrollBy(0, -navHeight - 10); }; + + if (location.hash) { + shiftWindow(); + } + + window.addEventListener("hashchange", shiftWindow); + } + + // Add styling, structure to TOC's. + $(".dropdown-menu").each(function () { + $(this).find("ul").each(function (index, item){ + var $item = $(item); + $item.addClass('unstyled'); + }); + }); + + // Global TOC. + if ($("ul.globaltoc li").length) { + patchToc($("ul.globaltoc"), 1); + } else { + // Remove Global TOC. + $(".globaltoc-container").remove(); + } + + // Local TOC. + patchToc($("ul.localtoc"), 2); + + // Mutate sub-lists (for bs-2.3.0). + $(".dropdown-menu ul").not(".dropdown-menu").each(function () { + var $ul = $(this), + $parent = $ul.parent(), + tag = $parent[0].tagName.toLowerCase(), + $kids = $ul.children().detach(); + + // Replace list with items if submenu header. + if (tag === "ul") { + $ul.replaceWith($kids); + } else if (tag === "li") { + // Insert into previous list. + $parent.after($kids); + $ul.remove(); + } + }); + + // Add divider in page TOC. + $localLi = $("ul.localtoc li"); + if ($localLi.length > 2) { + $localLi.first().after('
  • '); + } + + // Enable dropdown. + $('.dropdown-toggle').dropdown(); + + // Patch tables. + patchTables(); + + // Add Note, Warning styles. + $('div.note').addClass('alert').addClass('alert-info'); + $('div.warning').addClass('alert').addClass('alert-warning'); + + // Inline code styles to Bootstrap style. + $('tt.docutils.literal').not(".xref").each(function (i, e) { + // ignore references + if (!$(e).parent().hasClass("reference")) { + $(e).replaceWith(function () { + return $("").text($(this).text()); + }); + }}); + }); +}($jqTheme || window.jQuery)); diff --git a/book/_templates/sphinx_bootstrap/static/img/Facebook.png b/book/_templates/sphinx_bootstrap/static/img/Facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf68e9bb0053630a9df80385a3cbeee8d60eb86 GIT binary patch literal 3152 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±_ZT0= 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 literal 0 HcmV?d00001 diff --git a/book/_templates/sphinx_bootstrap/static/img/aapssfc_logo.svg b/book/_templates/sphinx_bootstrap/static/img/aapssfc_logo.svg new file mode 100644 index 0000000..2d33022 --- /dev/null +++ b/book/_templates/sphinx_bootstrap/static/img/aapssfc_logo.svg @@ -0,0 +1,595 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AAPSSFC + + diff --git a/book/_templates/sphinx_bootstrap/theme.conf b/book/_templates/sphinx_bootstrap/theme.conf new file mode 100644 index 0000000..dfb1ca2 --- /dev/null +++ b/book/_templates/sphinx_bootstrap/theme.conf @@ -0,0 +1,46 @@ +# Twitter Bootstrap Theme +[theme] +inherit = basic +stylesheet = basic.css +pygments_style = tango + +# Configurable options. +[options] +# Navigation bar title. (Default: ``project`` value) +navbar_title = + +# Tab name for entire site. (Default: "Site") +navbar_site_name = Site + +# Global TOC depth for "site" navbar tab. (Default: 1) +# Switching to -1 shows all levels. +globaltoc_depth = 1 + +# Include hidden TOCs in Site navbar? +# +# Note: If this is "false", you cannot have mixed ``:hidden:`` and +# non-hidden ``toctree`` directives in the same page, or else the build +# will break. +# +# Values: "true" (default) or "false" +globaltoc_includehidden = true + +# HTML navbar class (Default: "navbar") to attach to
    element. +# For black navbar, do "navbar navbar-inverse" +navbar_class = navbar + +# Fix navigation bar to top of page? +# Values: "true" (default) or "false" +navbar_fixed_top = true + +# Location of link to source. +# Options are "nav" (default), "footer" or anything else to exclude. +source_link_position = nav + +# Bootswatch (http://bootswatch.com/) theme. +# +# Options are nothing with "" (default) or the name of a valid theme such as +# "amelia" or "cosmo". +# +# Note that this is served off CDN, so won't be available offline. +bootswatch_theme = "" diff --git a/book/common/.gitignore b/book/common/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/book/common/bootstrap/images/animated-overlay.gif b/book/common/bootstrap/images/animated-overlay.gif new file mode 100644 index 0000000000000000000000000000000000000000..d441f75ebfbdf26a265dfccd670120d25c0a341c GIT binary patch literal 1738 zcmZ|OX;ji_6b5ixNYt8>l?gOuO)6lU%W(mxn(`>1S(XO;u`D+P%xqBvMr|w-Vyr1s z7R|Cn0b8|Hu<=Zmv1mFqh9Fj!NuZfKB2MP$e75`XJ@>=!y!Ux9xR3x;EW!q1^V>X| znVFuRUN`NqJ2)ybXh%e__h!!pv(M|S3+?9F%(K}zyE40MGyhWF5-IDgL&=%2-9`Nk z!1@8uk4t%_{(K~>N;sK&dzJbwJ=$kYTlL=$%#0Pfh>U{%i@~wWbvYsD_K-D`&+u1( z#Ma`>%q<^UhzGvi(hyE`zCD{-=2|zL5>wnB=DE!U?(CZG%q4@lDnCq_%&3DCla#(X zmBhDD+RN$aMWWHm?ig*>1Onn6~r?Ma~N2JKAxN>H%UtRyRqS)6Um!-Tz%-r=& zQmTb^JFIe3W^-kAm`}`2P|niMh>RYyd)S^f(dbrx965?rzbhP|XeP}o&&DSZ4|oYQ z)I{f!SfycYw?3=9W;o-B%U5xs(pP267X~9-7L|4WzaYexC0GtG8wWygm63rF{llCEraxzkc=IxvFQ-y37=_;e5 zJLq^gsSO0Ayz?a>E_?{dmUc+t#qv$)XN8$<<}rQ#)lsiw+pmL&J>~+hgpo>i$m+;l zZIa_ZRIfSeT$~v5d`EBV&*k`apPgjv&B|+d`Q!nyu{L4rs%ZfoF0*Kq8I%ByOcFpL zK=>wzofZo<+0GZLCnWM3oQ^pb(gRSf02;~cEn@LJ>~XB9IkEX{$N#Z`m%>S!U{uPx zloI%bLdo$Adxlh(Uv^yX7s5G&C zLwNRG>~T?G{kzupp8EcyLGPoPf)@&9Wqfw_l&uU-6cexk%5;uQg%wb=0k_733{i#& z1a2p)gV3S2+QG1-K9tZ}E~I<(P0r2aFFY-c{o?TUOz3Xjod#TLE2A_c?*T7t z=1>~%YW450{Qqno4t`}gvLnuMrcu8+#xEBoY%2_+Mb#Z6S38+r*M4O`-+!zl(@m`D zQsi|GA2l3gEy}LFe<#Hv8?$_L#u8E|3-bP$*La*E>B{X!Sy4i6?TKam!49aXCAW4S*P_O^H4^*DpiA40o}Uqw~Eo&veh1`|8i zD2$x+>_b^bXE4N;AW=5>iYak2%!JAh0j1*k1{p#iRCjbB7!cSws~U{1IA@acLII$t z$>X#A+^s6iJ5~DFG!xa?>z{=lxtdi1rzbM-(nqAu3D8h-&64xo6|E!p?pK0xT;qoK z`6%+SpBk+~M?nO}>2mTw!A{yZ6O>Z@kwSd4;8aWU5z!P~tQl?u==^+R`{OmOS}oZh zOXQ3{6kuz?Is^n^L7;9ieB9C+8B{>t+pDrlq4xGDDn#T#3T5$l1g`FTQkU;b-981j zNm{zC`$wn7etklM#qHI4=3m5gwa6DNS{?Z!vSObi_od{4eUo=_S2BKNpkSdiqe(k9WtkeM79;2-%CFbb)aB=&H1?i1}uwFzoZQ(38Kn1zBP ORn*B%u*Wk|4g3!*Rv{Mv literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/book/common/bootstrap/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..8b70001ecfe86019d102ceea4e45ae2a6d12330d GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^8Xzpd1SErbK34)Mwj^(Nm;YeE8S(uNP=vFJ#Am<$En9-cLebC{re^wgoll|t(`&s7)9J{YxO^N-aI z$5L3jD^ISzl+wQbw$Cm(|Mhq4jH=@2wI8o7+Gd%b|IIx5*Zn&?>lgCSXrXO^WskXw=UX3LH%8!s;k z#x%*aEGp*Jjm(QM&8zq~)!)n5QqVsS=vUPe*NBpo#FA922>S z4={E+nQaGTRC&5MhIkx*d-b$ng949h;3{8svn*F5o}?c;Kir+G=xvlfb9Ucnx!LzV zKYw1UzcGecb6t~6xWlB=3a51)dX2qx%p0t(H?ll;Xvl-Ua7M6%M)vm*~w}RD4lnZuhbmcl2i$G2U9fNc+T-xj%reP%UwdC`m~y zNwrEYN(E93Mh1q)x&~&t#s(pVmR6>wR)(g!2If`<23Pmrl10&wo1c=IR*74~l1E7k Qff^V*UHx3vIVCg!0Ol-e{r~^~ literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png b/book/common/bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..6721efa69bb4f12ff1e6942f132194d05cf6db14 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`URFw-?Q2r;y@GBvd_HqkXOw=ys=e0%K*iiX_$l+3hB+!`D<?)F zK#IZ0z|dINz)aWJAjHtp%GA`#$Vk_~+{(aU-t@->C>nC}Q!>*kacg*gD*6mi1B0il KpUXO@geCwHv^C@a literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_glass_100_f6f6f6_1x400.png b/book/common/bootstrap/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..819b645a460cec5ea41a3d7c1bd190744527ba2a GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!{KIr+qDZgOs>S*DCH8q6)|^lLQ8(vdyV&7=Rv!DK5_Nv5 zKU5EWSl#{5ocZwkn6~@klK(Ue|8%DOm~7JJCTPgP@M)6!J>`Xd0YEcVOI#yLQW8s2 zt&)pUffR$0fuXUkftjwcL5QKHm8q$fp{cHcxs`#z)%~|*Q8eV{r(~v8;?}U_QPM)7 O1_n=8KbLh*2~7a7A5n$? literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_glass_100_fdf5ce_1x400.png b/book/common/bootstrap/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..745f7254306ff09b24acbbc124b80ef0743beb92 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12SfLx;Tb-9DjS>o|}bBPw4YFRSXO})J!^(4ctv-3U*RGnKs-FC}~_ugTe~DWM4f69#nc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALFVdQ&MBb@0AzG^?*IS* literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_glass_65_ffffff_1x400.png b/book/common/bootstrap/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..e416cb6c0b4114befb3fe08dc2f5edc199d6565b GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADW)WEcNYf6yIsOdfIQ9ukH}&m z?E%JaC$sH<3_(v9#}JM4$r%X}t&0mp9yKsb%{ak$*<@oTP*SzTHKHUXu_VUvB{QuOw+8QBEKNWS44$rj JF6*2Ung9ZXGU@;T literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_glass_75_dadada_1x400.png b/book/common/bootstrap/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..219bbba169746a56248899a09c467f1bb30a22aa GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!T=8puqDZgOs>RXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^4042^XS%yf+nLJTdfOiitfEOZUbtqcsTp6>xU0-+%{KP5A*61N8LT`WyN O4Gf;HelF{r5}E*822L>m literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_glass_75_e6e6e6_1x400.png b/book/common/bootstrap/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d2d2a30234fdc4abb655d0a792727a9fa2ca27 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!TrvH)L6@80)r*_cdCvDr%)6ghVL16=s@mbz7H!uRdGeDa z?kzLg)16i!f8fKx84s0>4nc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12VciT^vI^j=w#>k(V)1qW$CZ|6)SVV-&*#dav<$DMuV&n0Dbpw@aKd3^85qo& hu)PaKLvDUbW?Cg~4R6o#n*lX2c)I$ztaD0e0sz#SbM62D literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/book/common/bootstrap/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..31ecaf2a9b65c1dc0301bc1c6d7eb37d1acde1c0 GIT binary patch literal 5815 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 literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/book/common/bootstrap/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c056bc089002eec947d5caa37b060c5c9798ec GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z$cXTCaSV~TeDu&>UIzz;hKv1@CM62OC7#SEE>l&Ep8XJTdT3VT!S{a(^8kk!d7+l?d gOBO{#ZhlH;S|x4`OCBXH1ZrULboFyt=akR{0KxKBTL1t6 literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/book/common/bootstrap/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9abae14c5e1427c911157bb76859b5b228b96c GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z$cXZEaSV~ToLo`U+vu0Ue0cG9p8hWqa?gxxGLm=1A1u)Cewe3oSeCaf zI$k30UHXoTXA5lSJe(zTcE%W-S*bfB&J`pw9sa4-R?IGW?p~6`>jMSP&M+u3 zY@9al)zrvpHlQu4C9V-ADTyViR>?)FK#IZ0z|dINz)aWJAjHtp%GA`#$Vk_~+{(aU i-t@->C>nC}Q!>*kacg*gD*6mi1B0ilpUXO@geCx8S6j{i literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/book/common/bootstrap/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f353a8ad302c5ca7947d76adeabcaeaea1bca75e GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt`LVi(`n!`KJ>Mxef&gxX1@bahq-QJ@-iVjABv8k}dz1cpvckAS5Q| zCa~sgnvR`g{(^+B71o<|biO4QZ((@QU$9to$Nb3+c9+^q0~7AA&s1G7ldW;K1nZSx z%@1{}Sk7(ZdA*`2jO&K2|NFg5Zyr%7kiMO>_`pxASP`akpQ9dh^WXn}$^S9yv#0i* zg_~-mfG$!kag8WRNi0dVN-jzTQVd20hQ_)EX1c}(A%>P#rlwYgrn&~^Rt5%F_urC5 e(U6;;l9^VCTf>q^Neh7*7(8A5T-G@yGywp{Uv&%s literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_222222_256x240.png b/book/common/bootstrap/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..c1cb1170c8b3795835b8831ab81fa9ae63b606b1 GIT binary patch literal 6922 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 QJ~;stWz}Trq%1=J3#jBGg8%>k literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_228ef1_256x240.png b/book/common/bootstrap/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0140cff67999e0b6daf269723e019335f5fee6 GIT binary patch literal 4549 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 F{Rh^YY-Iod literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_2e83ff_256x240.png b/book/common/bootstrap/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..84b601bf0f726bf95801da487deaf2344a32e4b8 GIT binary patch literal 4549 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 F{{S81aohj^ literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_454545_256x240.png b/book/common/bootstrap/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b6db1acdd433be80a472b045018f25c7f2cf7e08 GIT binary patch literal 6992 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 literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_cd0a0a_256x240.png b/book/common/bootstrap/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5b6b0930f672fa08e9b9bdbe5e55370fd1dc30 GIT binary patch literal 4549 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 DTfr$v literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_ef8c08_256x240.png b/book/common/bootstrap/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..036ee072d4aea1db3a78cbede62f8a0ba31972dc GIT binary patch literal 4549 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 C(P9<= literal 0 HcmV?d00001 diff --git a/book/common/bootstrap/images/ui-icons_ffd27a_256x240.png b/book/common/bootstrap/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..8b6c05868b55d63ff932afa2efbd9d7cedd5909a GIT binary patch literal 4549 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. + +*/ + + +/* +Color scheme ideas: + +Current scheme: pastel blue and yellow with a hint of red: + http://colorschemedesigner.com/#3N32mmmuew0w0 + +Primary Color: + 3D58A2 41507A 142B69 6F89D1 899CD1 +Secondary Color A: + EBF048 B1B456 989C17 F4F776 F5F798 +Secondary Color B: + F15149 B55B56 9D1E18 F87D76 F89D99 + + +Alternates: + +pastel green, yellow, and purple: + http://colorschemedesigner.com/#2P32PbX--w0w0 + + Primary Color: + A0FFA0 8ABF8A 34A634 B8FFB8 CBFFCB + Secondary Color A: + FFEFA0 BFB68A A69234 FFF3B8 FFF6CB + Secondary Color B: + BFABFF 9B90BF 5237A6 CFC0FF DCD1FF + + +pastel blue and yellow: + http://colorschemedesigner.com/#0W21TjruJw0w0 + +Primary Color: + F5C260 B89B64 9F741F FAD388 FADEA6 +Complementary Color: + 4A67A4 49597B 18326A 7C97D1 93A7D1 + + +*/ + + + +#pyInput { + font-size: 10pt; + font-family: Andale mono, monospace; + /*font-weight: bold;*/ + padding: 8px; + margin-top: 5px; +} + +#pyInputPane { + text-align: center; + margin-bottom: 40px; +} + + +table.pyOutputPane { + padding: 15px; +} + +#dataViz { + margin-left: 30px; +} + +table.frameDataViz { + border-spacing: 0px; + font-size: 10pt; + margin-top: 5px; + margin-left: 15px; + background-color: #dddddd; + padding: 5px; +} + +table.frameDataViz td.varname { + text-align: right; + padding: 5px; + padding-right: 8px; + border-right: 1px dashed #888888; +} + +table.frameDataViz td.val { + padding-left: 8px; + padding-right: 5px; + + padding-top: 8px; + padding-bottom: 8px; +} + +div.pyCodeOutputDiv { + max-width: 550px; + max-height: 620px; + overflow: auto; + margin-left: 30px; + /*margin-bottom: 4px;*/ +} + +table.pyCodeOutput { + font-family: Andale mono, monospace; + font-size:10pt; + line-height:1.1em; + border-spacing: 0px; + border-top: 1px solid #999999; + padding-top: 3px; + border-bottom: 1px solid #999999;p + margin-bottom: 20px; + padding-bottom: 20px; +} + +/* don't wrap lines within code output ... FORCE scrollbars to appear */ +table.pyCodeOutput td { + white-space: nowrap; +} + +table.pyCodeOutput .lineNo { + background-color:#FFFFFF; + color:#AAAAAA; + margin:0; +/* padding:0.2em; */ + padding-right:0.5em; + text-align:right; + width:3.1em; +} + +tabl.#pyCodeOutput .cod { + /*font-weight: bold;*/ + margin-left: 3px; + padding-left: 7px; + text-align: left; /* necessary or else doesn't work properly in IE */ +} + +div#editCodeLinkDiv { + text-align: center; + margin-top: 6px; +} + +#editCodeLinkOnError { + color: #142B69; +} + + +.errorOutput { + background-color: #F87D76; + font-size: 12pt; + padding: 2px; + line-height: 1.5em; + margin-bottom: 4px; +} + +.warningOutput { + font-size: 9pt; + color: #666666; +} + +button.bigBtn { + font-size: 14pt; + padding: 3px; +} + + + +/* VCR control buttons for stepping through execution */ + +.vcrControls { + margin-top: 10px; + margin-bottom: 20px; +} + +.vcrControls button { + margin-left: 5px; + margin-right: 5px; +} + +#pyStdout { + border: 1px solid #999999; + font-size: 10pt; + padding: 4px; + font-family: Andale mono, monospace; +} + + +.vizFrame { + margin-bottom: 20px; +/* padding-left: 8px; +/* border-left: 2px solid #cccccc; */ +} + + +/* Python data value rendering */ + +.nullObj { + color: #444444; +} + +.numberObj { +} + +.boolObj { +} + +.stringObj { +} + +.customObj { + font-style: italic; + font-size: 10pt; +} + +table.listTbl { + border: 0px solid black; + background-color: #F5F798; + border-spacing: 0px; +} + +table.listTbl td.listHeader { + padding-left: 5px; + padding-top: 3px; + font-size: 8pt; + color: #666666; + text-align: left; + border-left: 1px solid #555555; +} + +table.listTbl td.listElt { + padding-top: 0px; + padding-bottom: 8px; + padding-left: 10px; + padding-right: 10px; + border-bottom: 1px solid #555555; /* must match td.listHeader border */ + border-left: 1px solid #555555; /* must match td.listHeader border */ + vertical-align: bottom; +} + +table.tupleTbl { + border: 1px solid #555555; + background-color: #dddddd; /* must match .frameDataViz background-color */ + border-spacing: 0px; + color: black; +} + +table.tupleTbl td.tupleHeader { + padding-left: 5px; + padding-top: 3px; + padding-bottom: 0px; + font-size: 8pt; + color: #666666; + text-align: left; + border-left: 1px dotted #555555; +} + +table.tupleTbl td.tupleElt { + border-left: 1px dotted #555555; /* must match td.tupleHeader border */ + vertical-align: bottom; + padding: 5px; +} + +table.setTbl { + border: 1px solid black; + background-color: #F4F776; + border-spacing: 0px; + text-align: center; +} + +table.setTbl td.setElt { + padding: 8px; +} + +table.dictTbl { + background-color: #899CD1; + border-collapse: collapse; + border-spacing: 2px; + /*margin: 12px;*/ +} + +table.dictTbl tr.dictEntry { + border: 1px #111111 solid; +} + +table.dictTbl td.dictKey { + background-color: #41507A; + color: #ffffff; + + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 6px; + + text-align: right; + vertical-align: center; +} + +table.dictTbl td.dictVal { + background-color: #899CD1; /* must match color of table.dictTbl */ + + padding-top: 10px; + padding-bottom: 10px; + padding-right: 10px; + padding-left: 6px; + vertical-align: top; +} + + +table.classTbl { + background-color: #FFFFFF; + border-collapse: collapse; + border-spacing: 2px; +} + +table.classTbl tr.classEntry { + border: 1px #777777 solid; +} + +table.classTbl td.classKey { + background-color: #222222; + color: #dddddd; + + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 6px; + + text-align: right; + vertical-align: center; +} + +table.classTbl td.classVal { + background-color: #FFFFFF; /* must match color of table.classTbl */ + + padding-top: 10px; + padding-bottom: 10px; + padding-right: 10px; + padding-left: 6px; + vertical-align: top; +} + + +table.instTbl { + background-color: #FFFFDD; + border-collapse: collapse; + border-spacing: 2px; +} + +table.instTbl tr.instEntry { + border: 1px #111111 solid; +} + +table.instTbl td.instKey { + background-color: #41507A; + color: #ffffff; + + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 6px; + + text-align: right; + vertical-align: center; +} + +table.instTbl td.instVal { + background-color: #FFFFDD; /* must match color of table.instTbl */ + + padding-top: 10px; + padding-bottom: 10px; + padding-right: 10px; + padding-left: 6px; + vertical-align: top; +} + + + +.typeLabel { + font-size: 8pt; + color: #222222; + margin-bottom: 1px; +} + +td.dictKey .typeLabel { + color: #eeeeee; +} + +.circRefLabel { + font-size: 10pt; + color: #222222; +} + +#footer { + text-align: center; + color: #666666; + font-size: 9pt; + max-width: 700px; + border-top: 1px solid #bbbbbb; + padding-top: 5px; + margin-top: 10px; +} diff --git a/book/common/css/guiders-1.3.0.css b/book/common/css/guiders-1.3.0.css new file mode 100644 index 0000000..dbc908c --- /dev/null +++ b/book/common/css/guiders-1.3.0.css @@ -0,0 +1,138 @@ +.guider { + background: #FFF; + border: 1px solid #666; + font-family: arial; + position: absolute; + outline: none; + padding: 4px 12px; + width: 500px; + z-index: 100000005 !important; + + /* Shadow */ + -moz-box-shadow: 0 0px 8px #111; + -webkit-box-shadow: 0 0px 8px #111; + box-shadow: 0 0px 8px #111; + /* End shadow */ + + /* Rounded corners */ + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + /* End rounded corners */ +} + +.guiders_arrow { + width: 42px; + height: 42px; + position: absolute; + display: none; + background-repeat: no-repeat; + z-index: 100000006 !important; + + /** + * For optimization, the arrows image is inlined in the css below. + * + * To use your own arrows image, replace this background-image with your own arrows. + * It should have four arrows, top, right, left, and down. + */ + background-image: url(data:image/png;base64,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); + *background-image: url('guiders_arrows.png'); /* Asterisked properties only work in IE7 and below */ +} + +.guiders_arrow_right { + display: block; + background-position: 0px 0px; + right: -42px; +} +.guiders_arrow_down { + display: block; + background-position: 0px -42px; + bottom: -42px; +} +.guiders_arrow_up { + display: block; + background-position: 0px -126px; + top: -42px; +} +.guiders_arrow_left { + display: block; + background-position: 0px -84px; + left: -42px; +} + +.guiders_button { + background: -moz-linear-gradient(top, #5CA9FF 0%, #3D79C3 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5CA9FF), color-stop(100%, #3D79C3)); + background-color: #4A95E0; /* Overruled by background gradient, in browsers where they exist */ + border: solid 1px #4B5D7E; + color: #FFF; + cursor: pointer; + display: inline-block; + float: right; + font-size: 75%; + font-weight: bold; + margin-left: 6px; + min-width: 40px; + padding: 3px 5px; + text-align: center; + text-decoration: none; + /* Rounded corners */ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + /* End rounded corners */ +} + +.guiders_buttons_container { + height: 36px; + position: relative; + width: 100%; +} + +.guiders_close { + float: right; + padding: 10px 0 0; +} + +.guiders_content { + position: relative; +} + +.guiders_content h1 { + color: #1054AA; + float: left; + font-size: 21px; +} + +.guiders_content p { + clear: both; + color: #333; + font-size: 13px; +} + +.guiders_highlight { + position: relative; + z-index: 101; +} + +#guiders_overlay { + background-color: #000; + width: 100%; + height: 100%; + position: fixed; + top: 0px; + left: 0px; + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + z-index: 10; +} + +.guiders_x_button { + background-repeat: no-repeat; + background-image: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/4QOzRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzADIwMTA6MDk6MjQgMDg6MzY6NDEAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADaADAAQAAAABAAAADQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAJ9AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgADQANAwEiAAIRAQMRAf/dAAQAAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A74ehRj023172WNEODju36n3S76L0Q4p9RrdjfUNbnlm522Q5nt3bv3Hbd6jiueG17qqi70fabLHAbPz4b6Lmf8aoF7oafSb6PpOgeo/6G9n53o7/AE/7P8yip//Z/+0IRFBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D7QAAAAAAEABIAAAAAQABAEgAAAABAAE4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAAAAAABAAAAHg4QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0kAAAAGAAAAAAAAAAAAAAANAAAADQAAAAoAVQBuAHQAaQB0AGwAZQBkAC0AMQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAA0AAAAAUmdodGxvbmcAAAANAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAA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bnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNCBXaW5kb3dzIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxMC0wOS0yNFQwODozNjo0MS0wNTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxMC0wOS0yNFQwODozNjo0MS0wNTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTAtMDktMjRUMDg6MzY6NDEtMDU6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvanBlZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxQ0Q5QUNCNzQ4QzdERjExOUMyQkU4QkIzMTY5NzZDMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxQUQ5QUNCNzQ4QzdERjExOUMyQkU4QkIzMTY5NzZDMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjFDRDlBQ0I3NDhDN0RGMTE5QzJCRThCQjMxNjk3NkMwIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjcyMDAwMC8xMDAwMCIgdGlmZjpZUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOlJlc29sdXRpb25Vbml0PSIyIiB0aWZmOk5hdGl2ZURpZ2VzdD0iMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7NEZDNkYxNUZCODNCMjY3MjY4NzRCNjRFRTEzRkY2QjgiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMyIgZXhpZjpQaXhlbFlEaW1lbnNpb249IjEzIiBleGlmOkNvbG9yU3BhY2U9IjEiIGV4aWY6TmF0aXZlRGlnZXN0PSIzNjg2NCw0MDk2MCw0MDk2MSwzNzEyMSwzNzEyMiw0MDk2Miw0MDk2MywzNzUxMCw0MDk2NCwzNjg2NywzNjg2OCwzMzQzNCwzMzQzNywzNDg1MCwzNDg1MiwzNDg1NSwzNDg1NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM5Niw0MTQ4Myw0MTQ4NCw0MTQ4Niw0MTQ4Nyw0MTQ4OCw0MTQ5Miw0MTQ5Myw0MTQ5NSw0MTcyOCw0MTcyOSw0MTczMCw0MTk4NSw0MTk4Niw0MTk4Nyw0MTk4OCw0MTk4OSw0MTk5MCw0MTk5MSw0MTk5Miw0MTk5Myw0MTk5NCw0MTk5NSw0MTk5Niw0MjAxNiwwLDIsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMzA7NkFFQjM0Q0IwNUE5MkY5RjlCMEU2RjQ1NTQxOUVCRkUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjFDRDlBQ0I3NDhDN0RGMTE5QzJCRThCQjMxNjk3NkMwIiBzdEV2dDp3aGVuPSIyMDEwLTA5LTI0VDA4OjM2OjQxLTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M0IFdpbmRvd3MiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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); + *background-image: url('guiders_x_button.jpg'); /* Asterisked properties only work in IE7 and below */ + cursor: pointer; + height: 13px; + width: 13px; +} diff --git a/book/common/css/jquery-ui-1.10.3.custom.min.css b/book/common/css/jquery-ui-1.10.3.custom.min.css new file mode 100644 index 0000000..7dd866e --- /dev/null +++ b/book/common/css/jquery-ui-1.10.3.custom.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.10.3 - 2013-07-03 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.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}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/book/common/css/poll.css b/book/common/css/poll.css new file mode 100644 index 0000000..d8d8f26 --- /dev/null +++ b/book/common/css/poll.css @@ -0,0 +1,25 @@ +/* Styles for Runestone poll directive */ +.poll .poll-question { + padding-bottom: 10px; +} + +.poll-options > label { + margin-right: 5px; +} + +.poll .progress { + width: 350px; + height: 25px; + margin-top: -20px; +} + +.poll .progress .progress-bar { + height: 30px; + color: #333; +} + +.poll-text { + line-height: 22px; + display: inline-block; + vertical-align: text-bottom; +} diff --git a/book/common/css/runestone-custom-sphinx-bootstrap.css b/book/common/css/runestone-custom-sphinx-bootstrap.css new file mode 100644 index 0000000..2c71524 --- /dev/null +++ b/book/common/css/runestone-custom-sphinx-bootstrap.css @@ -0,0 +1,380 @@ +/* Runestone custom modifications */ + +body { + padding-top: 60px; + padding-bottom: 40px; + background-color: #eeeeee; +} + +pre { + margin: 1em 0; +} + +h5 { + font-weight: bold; + padding: 10px 0; +} + +/* navbar and menu related styles */ +@media (max-width: 768px) { + /* Remove top padding when top navbar goes collapsed in narrow viewports */ + body { + padding-top: 0; + margin: auto auto auto 5px; + } + + .navbar-fixed-top { + position: static; + } +} + +@media (min-width: 768px) { + /* when navbar is collapsed we don't want any vertical dividers taking up space */ + .navbar .divider-vertical { + height: 50px; + margin: 0 3px; + border-left: 1px solid #f2f2f2; + } +} + +div.container { + background-color: #ffffff; +} + +div.section { + max-width: 500pt; + margin-left: auto; + margin-right: auto; +} + +.navbar>.container .navbar-brand { + margin-left: 0; + +} + +.navbar>.container { + background-color: #f8f8f8; +} + +.footer>.container { + background-color: #eeeeee; +} + +.brand-logo { + float: left; + display: block; + background-size: 40px 40px !important; + width: 40px; + height: 40px; + margin-top: 4px; +} + +.social-menu { + width: 220px; + padding: 10px 10px 15px 20px; +} + +.fb-like { + margin-top: 7px; +} + +.fb_iframe_widget span, .fb_iframe_widget iframe { + height: 20px !important; + width: 82px !important; +} + +.twitter-follow-button { + margin-top: 10px; +} + +.gittip { + margin-top: 8px; +} + +.gittip-button { + margin-bottom: -6px; +} + +.dropdown-menu > li > span { + display: block; + padding: 3px 20px; + clear: both; + font-weight: bold; + line-height: 20px; + color: #333; + white-space: nowrap; +} + +.loggedinuser { + font-weight: bold; +} + +/* end navbar and menu related styles */ + +.CodeMirror { + margin: 0 0 1em 0; + background-color: #fff; +} + +button.btn, btn.btn-sm, +input[type="submit"].btn.btn-sm, +input[type="button"].btn.btn-sm { + font-size: 1em; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.btn { + margin: 5px 0; +} + +.btn.disabled { + /* needed in Bootstrap 3 to allow tooltips on disabled buttons */ + pointer-events: auto; +} + +.btn-default, +.btn-default.disabled, +.btn-default[disabled], +.btn-default.disabled:hover, +.btn-default[disabled]:hover { + color: #fff; + background-color: #474949; + border-color: #474949; +} + +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active { + background-color: #3a3c3c; + border-color: #2e2f2f; + color: #fff; +} + +.tooltip { + z-index: 2000 !important; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +h2 { + margin-top: 20px; +} + +.alert form { + margin-bottom: 0; +} +/* default bookstrap alert color is hard to read (low contrast). */ +.alert { + color: #333; + padding: 10px; +} + +/* override the color styles applied by Skulpt to the unittest results divs */ +.unittest-results.alert-danger { + background-color: #f2dede !important; +} + +.unittest-results.alert-success { + background-color: #dff0d8 !important; +} + +.alert label { + font-weight: normal; +} + +/* These admonition styles styles are copied from the Bootstrap .alert classes. + Most of the !important declarations are to override the Sphinx basic.css styles */ +.admonition { + padding: 8px 35px 8px 14px !important; + margin-bottom: 20px !important; + margin-top: 20px !important; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* .alert-danger */ +.admonition.caution { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +/* .alert-info */ +.admonition.tip, .admonition.note { + color: #333; + background-color: #d9edf7; + border-color: #bce8f1; +} + +/* from web2py.css */ +div.flash { + font-weight: bold; + position: fixed; + padding: 10px; + top: 55px; + right: 45px; + opacity: 0.95; + margin: 0 0 10px 10px; + vertical-align: middle; + cursor: pointer; + color: #fff; + background-color: #000; + border: 2px solid #fff; + border-radius: 8px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + background-image: -webkit-linear-gradient(top, #222, #000); + background-image: -o-linear-gradient(top, #222, #000); + background-image: -moz-linear-gradient(90deg, #222, #000); + background-image: linear-gradient(top, #222, #000); + background-repeat: repeat-x; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; + z-index: 2000; +} + +/* Styles for the login, registration, and Janrain forms */ +#web2py_user_form { + margin-top: 10px; +} + +#web2py_user_form form { + float: left; + margin-right: 150px; + padding-top: 3px; +} + +#web2py_user_form td { + padding-bottom: 15px; +} + +#web2py_user_form td.w2p_fw { + width: 299px; +} + +#auth-actions { + margin-top: 50px; +} + +#sign_in_text td { + font-size: 17px; + color: #333; + font-family: 'lucida grande', Verdana, sans-serif; + padding-bottom: 13px; +} + +#auth_user_remember { + margin-top: -20px; +} +/* End login, registration, Janrain styles */ + +/* end-of-chapter exercises styles */ +#exercises > ol > li, +#programming-exercises > ol > li { + margin-bottom: 30px; +} + +#exercises > ol > li:nth-child(even), +#programming-exercises > ol > li:nth-child(even) { + padding: 1.2em 1.4em; + background: #faf7df; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +/* End chapter exercises styles */ + +/* Modal dialog styles (scratch activecode, compare me, etc) */ +.scratch-ac-modal { + width: 800px; +} + +.compare-modal .progress { + margin-bottom: 0; +} + +.compare-me-progress { + width: 100%; +} + +.compare-me-progress .progress-bar, +.unittest-results-progress .progress-bar { + color: #333; +} + +.unittest-results-progress { + width: 25%; +} + +.compare-modal { + width: 350px; +} + +.compare-modal table { + border-collapse: separate; + border-spacing: 10px 5px; +} + +.codelens-modal { + /* we set some custom position styles so that the modal doesn't obscure the codelens visualizer */ + top: 20%; + right: 20%; + left: auto; + bottom: auto; +} + +@media (max-width: 768px) { + /* remove any custom position styles when the screen is small (mobile devices) + to prevent the modal from being partially off the screen */ + .codelens-modal { + top: 0 !important; + right: 0 !important; + bottom: 0 !important; + left: 0 !important; + } +} + +.codelens-modal > .modal-dialog { + width: 400px; +} +/* End modal dialog styles */ + +.footnote.table { + width: auto; + margin-bottom: 10px; +} + +.footnote.table td.label { + padding: 2px 5px 2px 5px; + background-color: #d9edf7; +} + +.ac-canvas { + background-color: white; +} + +.video-play-overlay { + position: absolute; + top: -35px; + left: 30%; + height: 85px; + width: 130px; + background-position: center; + background-repeat: no-repeat; +} + +.ui-sortable-helper { + height: auto !important; + width: auto !important; +} + +.activehtml { + width: 500px; + height: 400px; +} diff --git a/book/common/css/style.css b/book/common/css/style.css new file mode 100644 index 0000000..160eb85 --- /dev/null +++ b/book/common/css/style.css @@ -0,0 +1,350 @@ +/** + * Sphinx stylesheet -- sphinxdoc theme + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Originally created by Armin Ronacher for Werkzeug, adapted by Georg Brandl. + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', + 'Verdana', sans-serif; + font-size: 14px; + letter-spacing: -0.01em; + line-height: 150%; + text-align: center; + background-image: url(bg01.jpg); + color: black; + padding: 0; + border: 1px solid #aaa; + + margin: 0px 80px 0px 80px; + min-width: 740px; +} + +div.documentwrapper { + float: none; + border: 1px solid #0aa; +} + +div.document { + background-color: white; + text-align: left; + background-image: url(contents.png); + background-repeat: repeat-x; + min-height: 550px; +} + +div.bodywrapper { + margin: 0 240px 0 0; + border-right: 1px solid #ccc; +} + +div.body { + margin: 0; + padding: 0.5em 20px 20px 20px; +} + +div.related { + font-size: 1em; +} + +div.related ul { + background-color: rgb(49,94,97); + height: 2em; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +div.related ul li { + margin: 0; + padding: 0; + height: 2em; + float: left; +} + +div.related ul li.right { + float: right; + margin-right: 5px; +} + +div.related ul li a { + margin: 0; + padding: 0 5px 0 5px; + line-height: 1.75em; + /*color: rgb(75,136,141); */ + color: #ffffff; +} + +div.related ul li a:hover { + color: #3CA8E7; +} + +div.sphinxsidebarwrapper { + padding: 0; + position: fixed; + width: 220px; + height: 90%; + overflow-y: auto; + overflow-x: visible; + top: 25px; + bottom: 0; +} + +div.sphinxsidebar { + margin: 0; + padding: 0.5em 15px 15px 0; + width: 220px; + float: right; + font-size: 1em; + text-align: left; +} + +div.sphinxsidebar a:hover { + background-color: #d0d0d0; +} + + +div.sphinxsidebar h3, div.sphinxsidebar h4 { + margin: 1em 0 0.5em 0; + font-size: 1em; + padding: 0.1em 0 0.1em 0.5em; + color: white; + border: 1px solid #86989B; + background-color: #AFC1C4; +} + +div.sphinxsidebar h3 a { + color: white; +} + +div.sphinxsidebar ul { + padding-left: 1.5em; + margin-top: 7px; + padding: 0; + line-height: 130%; +} + +div.sphinxsidebar ul ul { + margin-left: 20px; +} + +div.footer { + background-color: rgb(49,94,97); + color: #ffffff; + padding: 3px 8px 3px 0; + clear: both; + font-size: 0.8em; + text-align: right; +} + +div.footer a { + color: #86989B; + text-decoration: underline; +} + +/* -- body styles ----------------------------------------------------------- */ + +p { + margin: 0.8em 0 0.5em 0; +} + +a { + color: rgb(75,136,141); + text-decoration: none; +} + +a:hover { + color: #2491CF; +} + +div.body a { + text-decoration: underline; +} + +h1 { + margin: 0; + padding: 0.7em 0 0.3em 0; + font-size: 1.5em; + color: #11557C; +} + +h2 { + margin: 1.3em 0 0.2em 0; + font-size: 1.35em; + padding: 0; +} + +h3 { + margin: 1em 0 -0.3em 0; + font-size: 1.2em; +} + +div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { + color: black!important; +} + +h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { + display: none; + margin: 0 0 0 0.3em; + padding: 0 0.2em 0 0.2em; + color: #aaa!important; +} + +h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, +h5:hover a.anchor, h6:hover a.anchor { + display: inline; +} + +h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, +h5 a.anchor:hover, h6 a.anchor:hover { + color: #777; + background-color: #eee; +} + +a.headerlink { + color: #c60f0f!important; + font-size: 1em; + margin-left: 6px; + padding: 0 4px 0 4px; + text-decoration: none!important; +} + +a.headerlink:hover { + background-color: #ccc; + color: white!important; +} + +cite, code, tt { + font-family: 'Consolas', 'Deja Vu Sans Mono', + 'Bitstream Vera Sans Mono', monospace; + font-size: 0.95em; + letter-spacing: 0.01em; +} + +tt { + background-color: #f2f2f2; + border-bottom: 1px solid #ddd; + color: #333; +} + +tt.descname, tt.descclassname, tt.xref { + border: 0; +} + +hr { + border: 1px solid #abc; + margin: 2em; +} + +a tt { + border: 0; + color: rgb(75,136,141); +} + +a tt:hover { + color: #2491CF; +} + +pre { + font-family: 'Consolas', 'Deja Vu Sans Mono', + 'Bitstream Vera Sans Mono', monospace; + font-size: 0.95em; + letter-spacing: 0.015em; + line-height: 120%; + padding: 0.5em; + border: 1px solid #ccc; + background-color: #f8f8f8; +} + +pre a { + color: inherit; + text-decoration: underline; +} + +td.linenos pre { + padding: 0.5em 0; +} + +div.quotebar { + background-color: #f8f8f8; + max-width: 250px; + float: right; + padding: 2px 7px; + border: 1px solid #ccc; +} + +div.topic { + background-color: #f8f8f8; +} + +table { + border-collapse: collapse; + margin: 0 -0.5em 0 -0.5em; +} + +table td, table th { + padding: 0.2em 0.5em 0.2em 0.5em; +} + +div.admonition, div.warning { + font-size: 0.9em; + margin: 1em 0 1em 0; + border: 1px solid #86989B; + background-color: #f7f7f7; + padding: 0; +} + +div.admonition p, div.warning p { + margin: 0.5em 1em 0.5em 1em; + padding: 0; +} + +div.admonition pre, div.warning pre { + margin: 0.4em 1em 0.4em 1em; +} + +div.admonition p.admonition-title, +div.warning p.admonition-title { + margin: 0; + padding: 0.1em 0 0.1em 0.5em; + color: white; + border-bottom: 1px solid #86989B; + font-weight: bold; + background-color: #AFC1C4; +} + +div.warning { + border: 1px solid #940000; +} + +div.warning p.admonition-title { + background-color: #CF0000; + border-bottom-color: #940000; +} + +div.admonition ul, div.admonition ol, +div.warning ul, div.warning ol { + margin: 0.1em 0.5em 0.5em 3em; + padding: 0; +} + +div.versioninfo { + margin: 1em 0 0 0; + border: 1px solid #ccc; + background-color: #DDEAF0; + padding: 8px; + line-height: 1.3em; + font-size: 0.9em; +} + +div.error { + background-color: #F4F4AD; +} + +.correct { + color: #84b8d9; +} \ No newline at end of file diff --git a/book/common/css/tabbedstuff.css b/book/common/css/tabbedstuff.css new file mode 100644 index 0000000..7ef23e2 --- /dev/null +++ b/book/common/css/tabbedstuff.css @@ -0,0 +1,32 @@ +/* Styles for the Runestone tabbed exhibit directive */ + +.tab-pane { + padding: 20px 15px 10px 15px; +} + +.nav.nav-tabs { + padding-top: 6px; + background-color: #CFCCB8; + border-color: #fbeed5; + border-radius: 4px; +} + +.nav.nav-tabs li { + margin-right: 1px; + margin-left: 6px; +} + +.nav.nav-tabs li > a { + background-color: #E6E2CC; + border-bottom-color: #fcf8e3; + color: #555; +} + +.nav-tabs > li > a:hover { + border-color: #b4b19d; + border-bottom-width:0; +} + +.nav.nav-tabs li.active > a { + background-color: #faf7df; +} diff --git a/book/common/css/user-highlights.css b/book/common/css/user-highlights.css new file mode 100644 index 0000000..bdeff7a --- /dev/null +++ b/book/common/css/user-highlights.css @@ -0,0 +1,65 @@ +.my-highlighted-text{ + background-color:#FFFF99; +} +.social-highlighted-text{ + background-color:#FFCCCC; +} +.highlight-option-box{ + position:absolute; + top:0px; + left:0px; +} +.highlight-option-box li{ + height:24px; +} +.dropdown-menu{ + background-clip: padding-box; + background-color: #FFFFFF; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 5px 5px 5px 5px; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + display: none; + float: left; + left: 0; + list-style: none outside none; + margin: 1px 0 0; + min-width: 160px; + padding: 4px 0; + position: absolute; + top: 100%; + z-index: 1000; +} +.dropdown-menu ul { + list-style: disc outside none; + margin: 0 0 9px 25px; + padding: 0; +} + +.sidebar-highlights{ + background-color:#FFFF99; +} +div.documentwrapper { + border : 0 none; +} +div.bodywrapper { + border-right: 0 none; +} +div.sphinxsidebar { + border-left: 1px solid #CCCCCC; + padding-left: 10px; +} +.body>.section .section{ + padding-top: 1px; +} +#jump-to-chapter{ + border: 1px solid #CCCCCC; + letter-spacing: 0.015em; + line-height: 120%; + padding: 0.5em; +} +#navigation-links{ + background-color: #F8F8F8; + border: 1px solid #CCCCCC; + padding:10px; + margin:10px; +} diff --git a/book/common/css/video.css b/book/common/css/video.css new file mode 100644 index 0000000..da72231 --- /dev/null +++ b/book/common/css/video.css @@ -0,0 +1,51 @@ +.exercises { + background-color:#f0ffff; +} + + +.active_out { + background-color:#dcdcdc; + border-radius: 6px; +} + +figcaption { + margin: .75em 0; + text-align: center; + font: italic 13px/18px Cambria, Georgia, "Times New Roman", Times, serif; +} + +img.bookfig { + margin-left: auto; + margin-right: auto; +} + +.video_popup { + display: none; +} +.ac_caption { + text-align: center; + font-weight: bold; +} + +.ac_caption_text { + font-weight: normal; +} + +.cl_caption { + text-align: center; + font-weight: bold; +} + +.ac_caption:before { + content: "ActiveCode: " counter(activecode) " "; + counter-increment: activecode; +} +.cl_caption:before { + content: "CodeLens: " counter(codelens) " "; + counter-increment: codelens; +} + +body { + counter-reset: activecode codelens; +} + diff --git a/book/common/ext/codelens/v3/css/basic.css b/book/common/ext/codelens/v3/css/basic.css new file mode 100644 index 0000000..611807f --- /dev/null +++ b/book/common/ext/codelens/v3/css/basic.css @@ -0,0 +1,61 @@ +/* + * SimpleModal Basic Modal Dialog + * http://www.ericmmartin.com/projects/simplemodal/ + * http://code.google.com/p/simplemodal/ + * + * Copyright (c) 2010 Eric Martin - http://ericmmartin.com + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Revision: $Id: basic.css 257 2010-07-27 23:06:56Z emartin24 $ + */ + +.basic-modal-content {display:none;} + +/* Overlay */ +#simplemodal-overlay {background-color:#000; cursor:wait;} + +/* Container */ +.simplemodal-container { + height:200px; + width:300px; + color:#bbb; + background-color:#333; + border:4px solid #444; + padding:5px; +} + +.simplemodal-container .simplemodal-data {padding:8px;} + +.simplemodal-container code { + background:#141414; + border-left:3px solid #65B43D; + color:#bbb; + display:block; + font-size:12px; + margin-bottom:12px; + padding:4px 6px 6px; +} + +.simplemodal-container a {color:#ddd;} + +.simplemodal-container a.modalCloseImg { + background:url(x.png) no-repeat; + width:25px; + height:29px; + display:inline; + z-index:3200; + position:absolute; + top:-15px; + right:-16px; + cursor:pointer;} + +.simplemodal-container h3 { + color:#84b8d9; + text-align: center; +} + +.feedbacktext { + color:#84b8d9; +} diff --git a/book/common/ext/codelens/v3/css/codemirror.css b/book/common/ext/codelens/v3/css/codemirror.css new file mode 100644 index 0000000..f81d8df --- /dev/null +++ b/book/common/ext/codelens/v3/css/codemirror.css @@ -0,0 +1,173 @@ +.CodeMirror { + line-height: 1.2em; /* pgbovine - enables underscore (_) characters to render properly */ + font-family: monospace; + + /* Necessary so the scrollbar can be absolutely positioned within the wrapper on Lion. */ + position: relative; + /* This prevents unwanted scrollbars from showing up on the body and wrapper in IE. */ + overflow: hidden; +} + +.CodeMirror-scroll { + overflow: auto; + height: 300px; + /* This is needed to prevent an IE[67] bug where the scrolled content + is visible outside of the scrolling box. */ + position: relative; + outline: none; +} + +/* Vertical scrollbar */ +.CodeMirror-scrollbar { + position: absolute; + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; + z-index: 5; +} +.CodeMirror-scrollbar-inner { + /* This needs to have a nonzero width in order for the scrollbar to appear + in Firefox and IE9. */ + width: 1px; +} +.CodeMirror-scrollbar.cm-sb-overlap { + /* Ensure that the scrollbar appears in Lion, and that it overlaps the content + rather than sitting to the right of it. */ + position: absolute; + z-index: 1; + float: none; + right: 0; + min-width: 12px; +} +.CodeMirror-scrollbar.cm-sb-nonoverlap { + min-width: 12px; +} +.CodeMirror-scrollbar.cm-sb-ie7 { + min-width: 18px; +} + +.CodeMirror-gutter { + position: absolute; left: 0; top: 0; + z-index: 10; + background-color: #f7f7f7; + border-right: 1px solid #eee; + min-width: 2em; + height: 100%; +} +.CodeMirror-gutter-text { + color: #aaa; + text-align: right; + padding: .4em .2em .4em .4em; + white-space: pre !important; + cursor: default; +} +.CodeMirror-lines { + padding: .4em; + white-space: pre; + cursor: text; +} + +.CodeMirror pre { + -moz-border-radius: 0; + -webkit-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + border-width: 0; margin: 0; padding: 0; background: transparent; + font-family: inherit; + font-size: inherit; + padding: 0; margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; +} + +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} +.CodeMirror-wrap .CodeMirror-scroll { + overflow-x: hidden; +} + +.CodeMirror textarea { + outline: none !important; +} + +.CodeMirror pre.CodeMirror-cursor { + z-index: 10; + position: absolute; + visibility: hidden; + border-left: 1px solid black; + border-right: none; + width: 0; +} +.cm-keymap-fat-cursor pre.CodeMirror-cursor { + width: auto; + border: 0; + background: transparent; + background: rgba(0, 200, 0, .4); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800); +} +/* Kludge to turn off filter in ie9+, which also accepts rgba */ +.cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) { + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} +.CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {} +.CodeMirror-focused pre.CodeMirror-cursor { + visibility: visible; +} + +div.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused div.CodeMirror-selected { background: #d7d4f0; } + +.CodeMirror-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* Default theme */ + +.cm-s-default span.cm-keyword {color: #708;} +.cm-s-default span.cm-atom {color: #219;} +.cm-s-default span.cm-number {color: #164;} +.cm-s-default span.cm-def {color: #00f;} +.cm-s-default span.cm-variable {color: black;} +.cm-s-default span.cm-variable-2 {color: #05a;} +.cm-s-default span.cm-variable-3 {color: #085;} +.cm-s-default span.cm-property {color: black;} +.cm-s-default span.cm-operator {color: black;} +.cm-s-default span.cm-comment {color: #a50;} +.cm-s-default span.cm-string {color: #a11;} +.cm-s-default span.cm-string-2 {color: #f50;} +.cm-s-default span.cm-meta {color: #555;} +.cm-s-default span.cm-error {color: #f00;} +.cm-s-default span.cm-qualifier {color: #555;} +.cm-s-default span.cm-builtin {color: #30a;} +.cm-s-default span.cm-bracket {color: #cc7;} +.cm-s-default span.cm-tag {color: #170;} +.cm-s-default span.cm-attribute {color: #00c;} +.cm-s-default span.cm-header {color: blue;} +.cm-s-default span.cm-quote {color: #090;} +.cm-s-default span.cm-hr {color: #999;} +.cm-s-default span.cm-link {color: #00c;} + +span.cm-header, span.cm-strong {font-weight: bold;} +span.cm-em {font-style: italic;} +span.cm-emstrong {font-style: italic; font-weight: bold;} +span.cm-link {text-decoration: underline;} + +span.cm-invalidchar {color: #f00;} + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} + +@media print { + + /* Hide the cursor when printing */ + .CodeMirror pre.CodeMirror-cursor { + visibility: hidden; + } + +} diff --git a/book/common/ext/codelens/v3/css/index.css b/book/common/ext/codelens/v3/css/index.css new file mode 100644 index 0000000..5cbdae4 --- /dev/null +++ b/book/common/ext/codelens/v3/css/index.css @@ -0,0 +1,201 @@ +/* CSS accompanying ../index.html */ + +body { + background-color: white; + + font-family: Georgia, Palatino, Times, serif; + + font-size: 12pt; + + /* use fixed width for simplicity */ + max-width: 900px; + min-width: 900px; + width: 900px; + + margin-left: auto; + margin-right: auto; +} + +/* for prose text only */ +p, li { + line-height: 1.5; +} + +h1 { + font-weight: normal; + margin-top: 0px; + margin-bottom: 8px; + line-height: 1.5; +} + +.smallH1 { + font-size: 14pt; + margin-left: -2px; +} + +#optLink { + font-size: 14pt; + text-decoration: none; + color: #3D58A2; + font-weight: bold; +} + +#optLink:hover { + color: #3D58A2; + text-decoration: underline; +} + +.titlePane { + margin-left: auto; + margin-right: auto; + margin-bottom: 0px; + text-align: center; +} + +.titlePane h1 { + font-size: 22pt; + margin-bottom: 5px; +} + +div.mainBodyPane { + margin-left: auto; + margin-right: auto; +} + +div.activityPane { + /* TOP RIGHT BOTTOM LEFT */ + padding: 15px 0px /* make right padding ZERO and just right-pad 'p' */ 5px 20px; + text-align: left; + border: 3px solid #005583; +} + +div.activityPane p { + padding-right: 30px; +} + +div.activityPane h1 { + font-size: 22pt; + margin-bottom: 20pt; +} + + +ul { + padding-left: 18px; +} + +li { + margin-bottom: 12px; + font-size: 10pt; +} + +a, +a:visited, +a:hover { + color: #3D58A2; +} + +#learnHeading, #embedHeading, #shareHeading { + font-family: verdana, arial, helvetica, sans-serif; + font-weight: bold; + font-size: 24pt; +} + +#learnHeading { + color: #062270; +} + +div#learnPane { + margin-top: 6pt; + margin-bottom: 8pt; + border: 5px solid #062270; +} + +div#learnPane p { + padding-right: 100px; +} + +div#learnPane #startLink { + font-size: 17pt; + font-weight: normal; + margin-top: 25px; + margin-bottom: 20px; + font-family: verdana, arial, helvetica, sans-serif; +} + +div#learnPane #startLink a { + border-bottom-style: solid; + border-bottom-width: 2px; + text-decoration: none; +} + +tt { + /*font-size: 85%;*/ +} + +div#embedPane { + margin-right: 5px; + border: 5px solid #5a7973; +} + + +#embedHeading { + color: #5a7973; +} + +div#sharePane { + margin-left: 5px; + border: 5px solid #4284d3; +} + +#shareHeading { + color: #4284d3; +} + +div#detailsPane { + margin-top: 0px; + margin-left: 5px; + border: 0px; /* NO BORDER! */ +} + +#partnershipDiv { + /*background-color: #d8e1e3;*/ + background-color: #d9cdb6; + width: 60%; + padding: 8px; + margin-left: auto; + margin-right: auto; + text-align: center; + + font-size: 10pt; + font-family: Monaco, arial, sans-serif; +} + +table.layoutTbl { + border: 0px; + max-width: 900px; +} + +table.layoutTbl td#embedPaneTd { + width: 60%; + vertical-align: top; +} + +table.layoutTbl td#sharePaneTd { + width: 40%; + vertical-align: top; +} + + +#footer { + color: #666666; + font-size: 9pt; + border-top: 1px solid #bbbbbb; + padding-top: 0px; + margin-top: 20px; + + /* center align */ + margin-left: auto; + margin-right: auto; + + font-family: verdana, arial, helvetica, sans-serif; +} diff --git a/book/common/ext/codelens/v3/css/jquery.qtip.css b/book/common/ext/codelens/v3/css/jquery.qtip.css new file mode 100644 index 0000000..fb7fe24 --- /dev/null +++ b/book/common/ext/codelens/v3/css/jquery.qtip.css @@ -0,0 +1,573 @@ +/*! qTip2 - Pretty powerful tooltips - v2.0.0 - 2012-09-10 +* http://craigsworks.com/projects/qtip2/ +* Copyright (c) 2012 Craig Michael Thompson; Licensed MIT, GPL */ + +/* Fluid class for determining actual width in IE */ +#qtip-rcontainer{ + position: absolute; + left: -28000px; + top: -28000px; + display: block; + visibility: hidden; +} + + /* Fluid class for determining actual width in IE */ + #qtip-rcontainer .ui-tooltip{ + display: block !important; + visibility: hidden !important; + position: static !important; + float: left !important; + } + +/* Core qTip styles */ +.ui-tooltip, .qtip{ + position: absolute; + left: -28000px; + top: -28000px; + display: none; + + max-width: 280px; + min-width: 50px; + + font-size: 10.5px; + line-height: 12px; +} + + .ui-tooltip-content{ + position: relative; + padding: 5px 9px; + overflow: hidden; + + text-align: left; + word-wrap: break-word; + } + + .ui-tooltip-titlebar{ + position: relative; + min-height: 14px; + padding: 5px 35px 5px 10px; + overflow: hidden; + + border-width: 0 0 1px; + font-weight: bold; + } + + .ui-tooltip-titlebar + .ui-tooltip-content{ border-top-width: 0 !important; } + + /* Default close button class */ + .ui-tooltip-titlebar .ui-state-default{ + position: absolute; + right: 4px; + top: 50%; + margin-top: -9px; + + cursor: pointer; + outline: medium none; + + border-width: 1px; + border-style: solid; + } + + * html .ui-tooltip-titlebar .ui-state-default{ top: 16px; } /* IE fix */ + + .ui-tooltip-titlebar .ui-icon, + .ui-tooltip-icon .ui-icon{ + display: block; + text-indent: -1000em; + direction: ltr; + } + + .ui-tooltip-icon, .ui-tooltip-icon .ui-icon{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-decoration: none; + } + + .ui-tooltip-icon .ui-icon{ + width: 18px; + height: 14px; + + text-align: center; + text-indent: 0; + font: normal bold 10px/13px Tahoma,sans-serif; + + color: inherit; + background: transparent none no-repeat -100em -100em; + } + + +/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ +.ui-tooltip-focus{} + +/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ +.ui-tooltip-hover{} + +/* Default tooltip style */ +.ui-tooltip-default{ + border-width: 1px; + border-style: solid; + border-color: #F1D031; + + background-color: #FFFFA3; + color: #555; +} + + .ui-tooltip-default .ui-tooltip-titlebar{ + background-color: #FFEF93; + } + + .ui-tooltip-default .ui-tooltip-icon{ + border-color: #CCC; + background: #F1F1F1; + color: #777; + } + + .ui-tooltip-default .ui-tooltip-titlebar .ui-state-hover{ + border-color: #AAA; + color: #111; + } + + +/*! Light tooltip style */ +.ui-tooltip-light{ + background-color: white; + border-color: #E2E2E2; + color: #454545; +} + + .ui-tooltip-light .ui-tooltip-titlebar{ + background-color: #f1f1f1; + } + + +/*! Dark tooltip style */ +.ui-tooltip-dark{ + background-color: #505050; + border-color: #303030; + color: #f3f3f3; +} + + .ui-tooltip-dark .ui-tooltip-titlebar{ + background-color: #404040; + } + + .ui-tooltip-dark .ui-tooltip-icon{ + border-color: #444; + } + + .ui-tooltip-dark .ui-tooltip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/*! Cream tooltip style */ +.ui-tooltip-cream{ + background-color: #FBF7AA; + border-color: #F9E98E; + color: #A27D35; +} + + .ui-tooltip-cream .ui-tooltip-titlebar{ + background-color: #F0DE7D; + } + + .ui-tooltip-cream .ui-state-default .ui-tooltip-icon{ + background-position: -82px 0; + } + + +/*! Red tooltip style */ +.ui-tooltip-red{ + background-color: #F78B83; + border-color: #D95252; + color: #912323; +} + + .ui-tooltip-red .ui-tooltip-titlebar{ + background-color: #F06D65; + } + + .ui-tooltip-red .ui-state-default .ui-tooltip-icon{ + background-position: -102px 0; + } + + .ui-tooltip-red .ui-tooltip-icon{ + border-color: #D95252; + } + + .ui-tooltip-red .ui-tooltip-titlebar .ui-state-hover{ + border-color: #D95252; + } + + +/*! Green tooltip style */ +.ui-tooltip-green{ + background-color: #CAED9E; + border-color: #90D93F; + color: #3F6219; +} + + .ui-tooltip-green .ui-tooltip-titlebar{ + background-color: #B0DE78; + } + + .ui-tooltip-green .ui-state-default .ui-tooltip-icon{ + background-position: -42px 0; + } + + +/*! Blue tooltip style */ +.ui-tooltip-blue{ + background-color: #E5F6FE; + border-color: #ADD9ED; + color: #5E99BD; +} + + .ui-tooltip-blue .ui-tooltip-titlebar{ + background-color: #D0E9F5; + } + + .ui-tooltip-blue .ui-state-default .ui-tooltip-icon{ + background-position: -2px 0; + } + + +/* Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-shadow{ + -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); +} + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-rounded, +.ui-tooltip-tipsy, +.ui-tooltip-bootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +/* Youtube tooltip style */ +.ui-tooltip-youtube{ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 3px #333; + -moz-box-shadow: 0 0 3px #333; + box-shadow: 0 0 3px #333; + + color: white; + border-width: 0; + + background: #4A4A4A; + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); + background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); +} + + .ui-tooltip-youtube .ui-tooltip-titlebar{ + background-color: #4A4A4A; + background-color: rgba(0,0,0,0); + } + + .ui-tooltip-youtube .ui-tooltip-content{ + padding: .75em; + font: 12px arial,sans-serif; + + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); + -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; + } + + .ui-tooltip-youtube .ui-tooltip-icon{ + border-color: #222; + } + + .ui-tooltip-youtube .ui-tooltip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* jQuery TOOLS Tooltip style */ +.ui-tooltip-jtools{ + background: #232323; + background: rgba(0, 0, 0, 0.7); + background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); + background-image: -moz-linear-gradient(top, #717171, #232323); + background-image: -webkit-linear-gradient(top, #717171, #232323); + background-image: -ms-linear-gradient(top, #717171, #232323); + background-image: -o-linear-gradient(top, #717171, #232323); + + border: 2px solid #ddd; + border: 2px solid rgba(241,241,241,1); + + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 12px #333; + -moz-box-shadow: 0 0 12px #333; + box-shadow: 0 0 12px #333; +} + + /* IE Specific */ + .ui-tooltip-jtools .ui-tooltip-titlebar{ + background-color: transparent; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; + } + .ui-tooltip-jtools .ui-tooltip-content{ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; + } + + .ui-tooltip-jtools .ui-tooltip-titlebar, + .ui-tooltip-jtools .ui-tooltip-content{ + background: transparent; + color: white; + border: 0 dashed transparent; + } + + .ui-tooltip-jtools .ui-tooltip-icon{ + border-color: #555; + } + + .ui-tooltip-jtools .ui-tooltip-titlebar .ui-state-hover{ + border-color: #333; + } + + +/* Cluetip style */ +.ui-tooltip-cluetip{ + -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + + background-color: #D9D9C2; + color: #111; + border: 0 dashed transparent; +} + + .ui-tooltip-cluetip .ui-tooltip-titlebar{ + background-color: #87876A; + color: white; + border: 0 dashed transparent; + } + + .ui-tooltip-cluetip .ui-tooltip-icon{ + border-color: #808064; + } + + .ui-tooltip-cluetip .ui-tooltip-titlebar .ui-state-hover{ + border-color: #696952; + color: #696952; + } + + +/* Tipsy style */ +.ui-tooltip-tipsy{ + background: black; + background: rgba(0, 0, 0, .87); + + color: white; + border: 0 solid transparent; + + font-size: 11px; + font-family: 'Lucida Grande', sans-serif; + font-weight: bold; + line-height: 16px; + text-shadow: 0 1px black; +} + + .ui-tooltip-tipsy .ui-tooltip-titlebar{ + padding: 6px 35px 0 10; + background-color: transparent; + } + + .ui-tooltip-tipsy .ui-tooltip-content{ + padding: 6px 10; + } + + .ui-tooltip-tipsy .ui-tooltip-icon{ + border-color: #222; + text-shadow: none; + } + + .ui-tooltip-tipsy .ui-tooltip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* Tipped style */ +.ui-tooltip-tipped{ + border: 3px solid #959FA9; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + + background-color: #F9F9F9; + color: #454545; + + font-weight: normal; + font-family: serif; +} + + .ui-tooltip-tipped .ui-tooltip-titlebar{ + border-bottom-width: 0; + + color: white; + background: #3A79B8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); + background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); + background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); + background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); + background-image: -o-linear-gradient(top, #3A79B8, #2E629D); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; + } + + .ui-tooltip-tipped .ui-tooltip-icon{ + border: 2px solid #285589; + background: #285589; + } + + .ui-tooltip-tipped .ui-tooltip-icon .ui-icon{ + background-color: #FBFBFB; + color: #555; + } + + +/** + * Twitter Bootstrap style. + * + * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. + * Does not work with IE 7. + */ +.ui-tooltip-bootstrap{ + font-size: 13px; + line-height: 18px; + + color: #333333; + background-color: #ffffff; + + + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + + *border-right-width: 2px; + *border-bottom-width: 2px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .ui-tooltip-bootstrap .ui-tooltip-titlebar{ + font-size: 18px; + line-height: 22px; + + border-bottom: 1px solid #ccc; + background-color: transparent; + } + + .ui-tooltip-bootstrap .ui-tooltip-titlebar .ui-state-default{ + right: 9px; top: 49%; + border-style: none; + } + + .ui-tooltip-bootstrap .ui-tooltip-icon{ + background: white; + } + + .ui-tooltip-bootstrap .ui-tooltip-icon .ui-icon{ + width: auto; + height: auto; + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .ui-tooltip-bootstrap .ui-tooltip-icon .ui-icon:hover{ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* IE9 fix - removes all filters */ +.ui-tooltip:not(.ie9haxors) div.ui-tooltip-content, +.ui-tooltip:not(.ie9haxors) div.ui-tooltip-titlebar{ + filter: none; + -ms-filter: none; +} + + +/* Tips plugin */ +.ui-tooltip .ui-tooltip-tip{ + margin: 0 auto; + overflow: hidden; + z-index: 10; +} + + .ui-tooltip .ui-tooltip-tip, + .ui-tooltip .ui-tooltip-tip .qtip-vml{ + position: absolute; + + line-height: 0.1px !important; + font-size: 0.1px !important; + color: #123456; + + background: transparent; + border: 0 dashed transparent; + } + + .ui-tooltip .ui-tooltip-tip canvas{ top: 0; left: 0; } + + .ui-tooltip .ui-tooltip-tip .qtip-vml{ + behavior: url(#default#VML); + display: inline-block; + visibility: visible; + } +/* Modal plugin */ +#qtip-overlay{ + position: fixed; + left: -10000em; + top: -10000em; +} + + /* Applied to modals with show.modal.blur set to true */ + #qtip-overlay.blurs{ cursor: pointer; } + + /* Change opacity of overlay here */ + #qtip-overlay div{ + position: absolute; + left: 0; top: 0; + width: 100%; height: 100%; + + background-color: black; + + opacity: 0.7; + filter:alpha(opacity=70); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + } + diff --git a/book/common/ext/codelens/v3/css/opt-frontend.css b/book/common/ext/codelens/v3/css/opt-frontend.css new file mode 100644 index 0000000..1fd537d --- /dev/null +++ b/book/common/ext/codelens/v3/css/opt-frontend.css @@ -0,0 +1,86 @@ +/* CSS accompanying ../visualize.html */ + +h1 { + font-weight: normal; + font-size: 20pt; + font-family: georgia, serif; + line-height: 1em; /* enforce single spacing so that Georgia works */ + + margin-top: 0px; + margin-bottom: 8px; +} + +h2 { + font-size: 12pt; + font-weight: normal; + font-family: georgia, serif; + line-height: 1.1em; /* enforce single spacing so that Georgia works */ + + margin-top: 2px; + margin-bottom: 20px; +} + + +body { + background-color: white; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 10pt; +} + +a, +a:visited, +a:hover { + color: #3D58A2; +} + +span { + padding: 0px; +} + +table#pyOutputPane { + padding: 10px; +} + +#pyInputPane { + margin-top: 20px; + margin-bottom: 20px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +#codeInputPane { + margin-top: 5px; + font-size: 12pt; + border: 1px solid #ddd; +} + +button.smallBtn { + font-size: 10pt; + padding: 3px; +} + +button.bigBtn { + font-size: 13pt; + padding: 6px; + margin-top: 6px; +} + +#footer { + color: #666666; + font-size: 9pt; + border-top: 1px solid #bbbbbb; + padding-top: 5px; + margin-top: 5px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + + +/* necessary for CodeMirror error line highlighting to work! */ +.CodeMirror .errorLine { background: #ffff3f !important; } diff --git a/book/common/ext/codelens/v3/css/opt-lessons.css b/book/common/ext/codelens/v3/css/opt-lessons.css new file mode 100644 index 0000000..02c07e9 --- /dev/null +++ b/book/common/ext/codelens/v3/css/opt-lessons.css @@ -0,0 +1,85 @@ +/* CSS accompanying ../lesson.html */ + +body { + background-color: white; + + font-family: verdana, arial, helvetica, sans-serif; + + font-size: 10pt; + + max-width: 900px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +div#lessonHeader { + margin-bottom: 15pt; + width: 800px; +} + +div#lessonTitle { + font-size: 16pt; + margin-bottom: 15pt; +} + +div#lessonDescription { + font-size: 11pt; + line-height: 1.5em; +} + +div#lessonNarration { + font-size: 11pt; + min-height: 25px; + margin-bottom: 12px; + line-height: 1.5em; + width: 800px; +} + + +a, +a:visited, +a:hover { + color: #3D58A2; +} + +span { + padding: 0px; +} + +table#pyOutputPane { + padding: 10px; +} + +#pyInputPane { + margin-top: 20px; + margin-bottom: 20px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +#codeInputPane { + margin-top: 5px; + font-size: 12pt; +} + +button.smallBtn { + font-size: 10pt; + padding: 3px; +} + +button.bigBtn { + font-size: 12pt; + padding: 5px; +} + +#footer { + color: #666; + font-size: 9pt; + border-top: 1px solid #bbb; + padding-top: 12px; + margin-top: 5px; +} diff --git a/book/common/ext/codelens/v3/css/pytutor.css b/book/common/ext/codelens/v3/css/pytutor.css new file mode 100644 index 0000000..8476270 --- /dev/null +++ b/book/common/ext/codelens/v3/css/pytutor.css @@ -0,0 +1,749 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/* Most recent color scheme redesign on 2012-08-19 */ + +/* To prevent CSS namespace clashes, prefix all rules with: + div.ExecutionVisualizer +*/ + + +/* reset some styles to nullify effects of existing stylesheets + e.g., http://meyerweb.com/eric/tools/css/reset/ +*/ +div.ExecutionVisualizer { + /* none for now */ +} + +div.ExecutionVisualizer table.visualizer { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 10pt; + margin-bottom: 10px; +} + +div.ExecutionVisualizer table.visualizer td.vizLayoutTd { + vertical-align: top; +} + +div.ExecutionVisualizer td#stack_td, +div.ExecutionVisualizer td#heap_td { + vertical-align:top; + font-size: 10pt; /* don't make fonts in the heap so big! */ +} + +div.ExecutionVisualizer #dataViz { + margin-left: 25px; +} + +div.ExecutionVisualizer div#codeDisplayDiv { + /* set this as default unless user specifies a custom size */ + width: 550px; +} + +div.ExecutionVisualizer div#pyCodeOutputDiv { + /*max-width: 550px;*/ + max-height: 450px; + /*max-height: 620px;*/ + overflow: auto; + /*margin-bottom: 4px;*/ + + margin-left: auto; + margin-right: auto; +} + +div.ExecutionVisualizer table#pyCodeOutput { + font-family: Andale mono, monospace; + font-size:12pt; + line-height:1.1em; + + border-collapse: separate; /* some crazy CSS voodoo that needs to be + there so that SVG arrows to the left + of the code line up vertically in Chrome */ + border-spacing: 0px; + border-top: 1px solid #bbb; + padding-top: 3px; + border-bottom: 1px solid #bbb; + /*margin-top: 6px;*/ + margin: 6px auto; /* Center code in its pane */ +} + +/* don't wrap lines within code output ... FORCE scrollbars to appear */ +div.ExecutionVisualizer table#pyCodeOutput td { + white-space: nowrap; + vertical-align: middle; /* explicitly force, to override external CSS conflicts */ +} + +div.ExecutionVisualizer #leftCodeGutterSVG { + width: 18px; + height: 0px; /* programmatically set this later ... IE needs this to + be 0 or it defaults to something arbitrary and gross */ +} + +div.ExecutionVisualizer #prevLegendArrowSVG, +div.ExecutionVisualizer #curLegendArrowSVG { + width: 18px; + height: 10px; +} + +div.ExecutionVisualizer .arrow { + font-size: 16pt; +} + +div.ExecutionVisualizer table#pyCodeOutput .lineNo { + color: #aaa; + padding: 0.2em; + padding-left: 0.3em; + padding-right: 0.5em; + text-align: right; +} + +div.ExecutionVisualizer table#pyCodeOutput .cod { + /*font-weight: bold;*/ + margin-left: 3px; + padding-left: 7px; + text-align: left; /* necessary or else doesn't work properly in IE */ +} + +div.ExecutionVisualizer div#progOutputs { + margin-top: 8px; +} + +div.ExecutionVisualizer div#legendDiv { + margin-top: 10px; + padding: 0px; + text-align: left; + color: #666; + font-size: 9pt; +} + +div.ExecutionVisualizer div#editCodeLinkDiv { + text-align: center; + /* + margin-top: 12px; + margin-bottom: 4px; + */ + margin: 8px auto; +} + +div.ExecutionVisualizer div#annotateLinkDiv { + /*text-align: left;*/ + margin-top: 0px; + margin-bottom: 12px; + /* + margin-left: auto; + margin-right: auto; + */ +} + +div.ExecutionVisualizer div#stepAnnotationDiv { + margin-bottom: 12px; +} + +div.ExecutionVisualizer textarea#stepAnnotationEditor, +div.ExecutionVisualizer textarea#vizTitleEditor, +div.ExecutionVisualizer textarea#vizDescriptionEditor { + border: 1px solid #999999; + padding: 4px; + + overflow: auto; /* to look pretty on IE */ + /* make sure textarea doesn't grow and stretch */ + resize: none; +} + + +div.ExecutionVisualizer #errorOutput { + color: #e93f34; /* should match brightRed JavaScript variable */ + font-size: 12pt; + padding: 2px; + line-height: 1.5em; + margin-bottom: 4px; +} + +/* VCR control buttons for stepping through execution */ + +div.ExecutionVisualizer #vcrControls { + margin: 15px auto; + /*width: 100%;*/ + text-align: center; +} + +div.ExecutionVisualizer #vcrControls button { + margin-left: 2px; + margin-right: 2px; +} + +div.ExecutionVisualizer #vcrControls #curInstr { + margin-left: 4px; + margin-right: 4px; +} + +div.ExecutionVisualizer #pyStdout { + border: 1px solid #999999; + font-size: 12pt; + padding: 4px; + font-family: Andale mono, monospace; + + overflow: auto; /* to look pretty on IE */ + /* make sure textarea doesn't grow and stretch */ + resize: none; +} + + +div.ExecutionVisualizer .vizFrame { + margin-bottom: 20px; + padding-left: 8px; + border-left: 2px solid #cccccc; +} + + +/* Rendering of primitive types */ + +div.ExecutionVisualizer .nullObj { +// font-size: 8pt; +} + +div.ExecutionVisualizer .stringObj, +div.ExecutionVisualizer .customObj, +div.ExecutionVisualizer .funcObj { + font-family: Andale mono, monospace; + white-space: nowrap; +} + +div.ExecutionVisualizer .retval { + font-size: 9pt; +} + +div.ExecutionVisualizer .stackFrame .retval { + color: #e93f34; /* highlight non-zombie stack frame return values - + should match brightRed JavaScript variable */ +} + +/* Rendering of basic compound types */ + +div.ExecutionVisualizer table.listTbl, +div.ExecutionVisualizer table.tupleTbl, +div.ExecutionVisualizer table.setTbl { + background-color: #ffffc6; +} + + +div.ExecutionVisualizer table.listTbl { + border: 0px solid black; + border-spacing: 0px; +} + +div.ExecutionVisualizer table.listTbl td.listHeader, +div.ExecutionVisualizer table.tupleTbl td.tupleHeader { + padding-left: 4px; + padding-top: 2px; + padding-bottom: 3px; + font-size: 8pt; + color: #777; + text-align: left; + border-left: 1px solid #555555; +} + +div.ExecutionVisualizer table.tupleTbl { + border-spacing: 0px; + color: black; + + border-bottom: 1px solid #555555; /* must match td.tupleHeader border */ + border-top: 1px solid #555555; /* must match td.tupleHeader border */ + border-right: 1px solid #555555; /* must match td.tupleHeader border */ +} + + +div.ExecutionVisualizer table.listTbl td.listElt { + border-bottom: 1px solid #555555; /* must match td.listHeader border */ + border-left: 1px solid #555555; /* must match td.listHeader border */ +} + +div.ExecutionVisualizer table.tupleTbl td.tupleElt { + border-left: 1px solid #555555; /* must match td.tupleHeader border */ +} + +div.ExecutionVisualizer table.customObjTbl { + background-color: white; + color: black; + border: 1px solid black; +} + +div.ExecutionVisualizer table.customObjTbl td.customObjElt { + padding: 5px; +} + +div.ExecutionVisualizer table.listTbl td.listElt, +div.ExecutionVisualizer table.tupleTbl td.tupleElt { + padding-top: 0px; + padding-bottom: 8px; + padding-left: 10px; + padding-right: 10px; + vertical-align: bottom; +} + +div.ExecutionVisualizer table.setTbl { + border: 1px solid #555555; + border-spacing: 0px; + text-align: center; +} + +div.ExecutionVisualizer table.setTbl td.setElt { + padding: 8px; +} + + +div.ExecutionVisualizer table.dictTbl, +div.ExecutionVisualizer table.instTbl, +div.ExecutionVisualizer table.classTbl { + border-spacing: 1px; +} + +div.ExecutionVisualizer table.dictTbl td.dictKey, +div.ExecutionVisualizer table.instTbl td.instKey, +div.ExecutionVisualizer table.classTbl td.classKey { + background-color: #faebbf; +} + +div.ExecutionVisualizer table.dictTbl td.dictVal, +div.ExecutionVisualizer table.instTbl td.instVal, +div.ExecutionVisualizer table.classTbl td.classVal { + background-color: #ffffc6; +} + + +div.ExecutionVisualizer table.dictTbl td.dictKey, +div.ExecutionVisualizer table.instTbl td.instKey, +div.ExecutionVisualizer table.classTbl td.classKey { + padding-top: 12px /*15px*/; + padding-bottom: 5px; + padding-left: 10px; + padding-right: 4px; + + text-align: right; +} + +div.ExecutionVisualizer table.dictTbl td.dictVal, +div.ExecutionVisualizer table.instTbl td.instVal, +div.ExecutionVisualizer table.classTbl td.classVal { + padding-top: 12px /*15px*/; + padding-bottom: 5px; + padding-right: 10px; + padding-left: 4px; +} + + +div.ExecutionVisualizer table.classTbl td, +div.ExecutionVisualizer table.instTbl td { + border-bottom: 1px #888 solid; +} + +div.ExecutionVisualizer table.classTbl td.classVal, +div.ExecutionVisualizer table.instTbl td.instVal { + border-left: 1px #888 solid; +} + +div.ExecutionVisualizer table.classTbl { + border-collapse: collapse; + border: 1px #888 solid; +} + +/* only add a border to dicts if they're embedded within another object */ +div.ExecutionVisualizer td.listElt table.dictTbl, +div.ExecutionVisualizer td.tupleElt table.dictTbl, +div.ExecutionVisualizer td.dictVal table.dictTbl, +div.ExecutionVisualizer td.instVal table.dictTbl, +div.ExecutionVisualizer td.classVal table.dictTbl { + border: 1px #888 solid; +} + +div.ExecutionVisualizer .objectIdLabel { + font-size: 8pt; + color: #444; + margin-bottom: 2px; +} + +div.ExecutionVisualizer .typeLabel { + font-size: 8pt; + color: #555; + margin-bottom: 2px; +} + +div.ExecutionVisualizer div#stack, +div.ExecutionVisualizer div#globals_area { + padding-left: 10px; + padding-right: 30px; + + /* no longer necessary ... */ + /*float: left;*/ + /* border-right: 1px dashed #bbbbbb; */ +} + +div.ExecutionVisualizer div.stackFrame, +div.ExecutionVisualizer div.zombieStackFrame { + background-color: #ffffff; + margin-bottom: 15px; + padding: 2px; + padding-left: 6px; + padding-right: 6px; + padding-bottom: 4px; + font-size: 10pt; +} + +div.ExecutionVisualizer div.zombieStackFrame { + border-left: 1px dotted #aaa; + /*color: #c0c0c0;*/ + color: #b0b0b0; +} + +div.ExecutionVisualizer div.highlightedStackFrame { + background-color: #d7e7fb; + + /*background-color: #c0daf8;*/ + /*background-color: #9eeaff #c5dfea;*/ +} + +div.ExecutionVisualizer div.stackFrame, +div.ExecutionVisualizer div.highlightedStackFrame { + border-left: 1px solid #a6b3b6; +} + + +div.ExecutionVisualizer div.stackFrameHeader { + font-family: Andale mono, monospace; + font-size: 10pt; + margin-top: 4px; + margin-bottom: 3px; + white-space: nowrap; +} + +div.ExecutionVisualizer td.stackFrameVar { + text-align: right; + padding-right: 8px; + padding-top: 3px; + padding-bottom: 3px; +} + +div.ExecutionVisualizer td.stackFrameValue { + text-align: left; + border-bottom: 1px solid #aaaaaa; + border-left: 1px solid #aaaaaa; + + vertical-align: middle; + + padding-top: 3px; + padding-left: 3px; + padding-bottom: 3px; +} + +div.ExecutionVisualizer .stackFrameVarTable tr { + +} + +div.ExecutionVisualizer .stackFrameVarTable { + text-align: right; + padding-top: 3px; + + /* right-align the table */ + margin-left: auto; + margin-right: 0px; + + /* hack to counteract possible nasty CSS reset styles from parent divs */ + border-collapse: separate; + border-spacing: 2px; +} + +div.ExecutionVisualizer div#heap { + float: left; + padding-left: 30px; +} + +div.ExecutionVisualizer td.toplevelHeapObject { + /* needed for d3 to do transitions */ + padding-left: 8px; + padding-right: 8px; + padding-top: 4px; + padding-bottom: 4px; + /* + border: 2px dotted white; + border-color: white; + */ +} + +div.ExecutionVisualizer table.heapRow { + margin-bottom: 10px; +} + +div.ExecutionVisualizer div.heapObject { + padding-left: 2px; /* leave a TINY amount of room for connector endpoints */ +} + +div.ExecutionVisualizer div.heapPrimitive { + padding-left: 4px; /* leave some more room for connector endpoints */ +} + +div.ExecutionVisualizer div#stackHeader { + margin-bottom: 15px; + text-align: right; +} + +div.ExecutionVisualizer div#heapHeader { + /*margin-top: 2px; + margin-bottom: 13px;*/ + margin-bottom: 15px; +} + +div.ExecutionVisualizer div#stackHeader, +div.ExecutionVisualizer div#heapHeader { + color: #333333; + font-size: 10pt; +} + +div.ExecutionVisualizer #executionSlider { + /* if you set 'width', then it looks ugly when you dynamically resize */ + margin-top: 15px; + margin-bottom: 5px; + + margin-left: auto; + margin-right: auto; + + width: 95%; +} + +div.ExecutionVisualizer #executionSliderCaption { + font-size: 8pt; + color: #666666; + margin-top: 15px; +} + +div.ExecutionVisualizer #executionSliderFooter { + margin-top: -7px; /* make it butt up against #executionSlider */ +} + + +/* darken slider handle a bit */ +div.ExecutionVisualizer .ui-slider .ui-slider-handle { + border: 1px solid #999; +} + + +/* for annotation bubbles */ + +/* For styling tricks, see: http://css-tricks.com/textarea-tricks/ */ +textarea.bubbleInputText { + border: 1px solid #ccc; + outline: none; + overflow: auto; /* to look pretty on IE */ + + /* make sure textarea doesn't grow and stretch the enclosing bubble */ + resize: none; + width: 225px; + max-width: 225px; + height: 35px; + max-height: 35px; +} + + +.ui-tooltip-pgbootstrap, +textarea.bubbleInputText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 9pt; + line-height: 1.3em; +} + + +/* modified version of Twitter bootstrap style by Philip Guo */ +.ui-tooltip-pgbootstrap{ + color: #333; + background-color: #ffffff; + + max-width: 250px; + min-width: 10px; + + border: 2px solid #4284D3; + + cursor: pointer; + + *border-right-width: 2px; + *border-bottom-width: 2px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + /* way too poofy ... + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + */ + + -webkit-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .ui-tooltip-pgbootstrap .ui-tooltip-titlebar{ + font-size: 18px; + line-height: 22px; + + border-bottom: 1px solid #ccc; + background-color: transparent; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-content{ + padding: 5px /* 5px is minimum or else it might look ugly */ 8px; + } + + + .ui-tooltip-pgbootstrap .ui-tooltip-titlebar .ui-state-default{ + right: 9px; top: 49%; + border-style: none; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon{ + background: white; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon{ + width: auto; + height: auto; + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon:hover{ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-pgbootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + + +.ui-tooltip-pgbootstrap-stub{ + border: 1px solid #999; + + /* + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + */ +} + + .ui-tooltip-pgbootstrap-stub .ui-tooltip-content{ + padding: 6px 9px; + } + + +div.ExecutionVisualizer .annotationText, +div.ExecutionVisualizer .vizDescriptionText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 11pt; + line-height: 1.5em; +} + +div.ExecutionVisualizer .vizTitleText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 16pt; + margin-bottom: 12pt; +} + +div.ExecutionVisualizer div#vizHeader { + margin-bottom: 10px; + width: 700px; + max-width: 700px; +} + +/* prev then curr, so curr gets precedence when both apply */ +div.ExecutionVisualizer .highlight-prev { + background-color: #F0F0EA; +} + +div.ExecutionVisualizer .highlight-curr { + background-color: #FFFF66; +} + +div.ExecutionVisualizer .highlight-legend { + padding: 2px; +} + +/* resizing sliders from David Pritchard */ +.ui-resizable-e { + background-color: #dddddd; + width: 1px; + border: 3px solid white; +} + +.ui-resizable-e:hover { + border-color: #dddddd; +} + + +/* for pyCrazyMode */ + +/* prev then curr, so curr gets precedence when both apply */ +div.ExecutionVisualizer .pycrazy-highlight-prev { + background-color: #eeeeee; /*#F0F0EA;*/ + /* + text-decoration: none; + border-bottom: 1px solid #dddddd; + */ +} + +div.ExecutionVisualizer .pycrazy-highlight-cur { + background-color: #FFFF66; + /* aligned slightly higher than border-bottom */ + /* + text-decoration: none; + border-bottom: 1px solid #e93f34; + */ +} + +div.ExecutionVisualizer .pycrazy-highlight-prev-and-cur { + background-color: #FFFF66; + + text-decoration: none; + border-bottom: 1px solid #999999; +} diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEr#)R9Ln2z=UU%d=WFXS=@V?HT z#xG*`>Yvsgk=}99w^d^D^d*@m74oMo<%#FcopJf?u00-~YVKV2wzrI*_R6;UORMea zBFVSEnN~eiVA6V&z`E)YLz5Aok^D)In}Yn=OzDpgR5Wv0XfT8pOkmV{sKAJ-PO9#T zZK}IXj&Q-V!U)!LcB_3K0&C*{ literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcmVbvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQj@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQY-ImG zFPf9b{J;c_6SHRK%WcbN_hZpM=(Ry;4Rxv2@@2Y=$K57eF$X$=!PC{xWt~$(69B)$ BI)4BF literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~` zFlmZ}YMcJY=eo?o%*@I?2`NblNeMudl#t?{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f1273672d253263b7564e9e21d69d7d9d0b337d9 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%l7LV~E7mxPQ=F85a&M@g_{ d|GeK{$Y5lo%PMu^>wln`44$rjF6*2UngE4^EGqy2 literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_222222_256x240.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a641a371afa0fbb08ba599dc7ddf14b9bfc3c84f GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@e{{5C=l}o! literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..85e63e9f604ce042d59eb06a8428eeb7cb7896c9 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/book/common/ext/codelens/v3/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e117effa3dca24e7978cfc5f8b967f661e81044f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css b/book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css new file mode 100644 index 0000000..1bc08fb --- /dev/null +++ b/book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css @@ -0,0 +1,316 @@ +/*! + * jQuery UI CSS Framework 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/*! + * jQuery UI CSS Framework 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * 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 + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +/* pgbovine - switch border from #dddddd to #ccc */ +.ui-widget-content { border: 1px solid #ccc; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.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; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .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; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } + +/* pgbovine - eliminate hover colors */ +/* +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .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; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +*/ + +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .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; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .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; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.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; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*! + * jQuery UI Slider 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } diff --git a/book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css b/book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css new file mode 100644 index 0000000..f3988bc --- /dev/null +++ b/book/common/ext/codelens/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css @@ -0,0 +1,335 @@ +/*! + * jQuery UI CSS Framework 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/*! + * jQuery UI CSS Framework 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * 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 + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +/* pgbovine - switch border from #dddddd to #ccc */ +.ui-widget-content { border: 1px solid #ccc; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.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; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .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; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } + +/* pgbovine - eliminate hover colors */ +/* +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .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; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +*/ + +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .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; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .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; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.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; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*! + * jQuery UI Resizable 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*! + * jQuery UI Slider 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } diff --git a/book/common/ext/codelens/v3/css/x.png b/book/common/ext/codelens/v3/css/x.png new file mode 100644 index 0000000000000000000000000000000000000000..c11f7af69fad034c3564a4a455be0d9d569e9878 GIT binary patch literal 1066 zcmV+_1l9YAP)P0012b1^@s6UwFrL0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#%t=H+RCwB)mP<%fQ5eVP&iH858mu%+ z@(~);$`IRRsFdWQg)j?25H#9E5+YcjgqtV`TnUOGY74=Yv`}0503pyMZ4rozbYe7z z$w%s><2+9PZ}`sb+&d4g1HZX*&*S@_?|k1m_h>>0%PC7PDB-6UEP>TijU~?!h0g26K6CE8L!teL1 zLtn=e$y0l^wY4QQZl=Dz-t5usSR!v^>*VBQl#$xnTElxmL4jCYTr|`V4-cy%A7hEQ zWNUeOxxwJ->T0CEva(W-#m>%7q;7CW+W51oizD>jY>#XZ^Ja5$m{(#C6SY}DW3nc-b6NO}E# zC=@!P4IkO{$dclCF;Rmo6MzcUQCp&zxZUo1x(G;zH*VRe4xXN#HW+PbY0-_)e^mg- zjUl^AOG_OxB=mFEm0D@BE7x657g{w zXlO8G*GW6Ry1Lrn#rXI*Wro8b0bQaN3ahfBgrlv;h@9*mZTU%RSQD1Bp zNe6l04wlWOdPGMBj`WzuDF(Dess{%L2fOX+0&>Vr&h#0WN~nh<*Mt(z<2vC7~2J!3(F;`5pmu9~~Wq;u)Wsn(|;{en9_rPzUIU zzsgIMq1o}P*}Y6~nLFn5^HNn+RbE+H*@fifWE&2?5WbkdCMG6ah{q<{-QYX3 z0k(k;1nAU~A{qxMg_D4UvRN#L|7Y?f$m=lp4R-l@L_$A+2kd|Ya7-r)C5V2JU?Cd| zrE&UYa;!3WW7)Y64W@HxpN(!ad+Y%T1UU= 10.7. This has transparent scrollbars, so the + // overlaying of one scrollbar with another won't work. This is a + // temporary hack to simply turn off the overlay scrollbar. See + // issue #727. + if (mac_geLion) { scrollbar.style.zIndex = -2; scrollbar.style.visibility = "hidden"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + else if (ie_lt8) scrollbar.style.minWidth = "18px"; + + // Check for problem with IE innerHTML not working when we have a + // P (or similar) parent node. + try { charWidth(); } + catch (e) { + if (e.message.match(/runtime/i)) + e = new Error("A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)"); + throw e; + } + + // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval. + var poll = new Delayed(), highlight = new Delayed(), blinker; + + // mode holds a mode API object. doc is the tree of Line objects, + // work an array of lines that should be parsed, and history the + // undo history (instance of History constructor). + var mode, doc = new BranchChunk([new LeafChunk([new Line("")])]), work, focused; + loadMode(); + // The selection. These are always maintained to point at valid + // positions. Inverted is used to remember that the user is + // selecting bottom-to-top. + var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false}; + // Selection-related flags. shiftSelecting obviously tracks + // whether the user is holding shift. + var shiftSelecting, lastClick, lastDoubleClick, lastScrollTop = 0, draggingText, + overwrite = false, suppressEdits = false; + // Variables used by startOperation/endOperation to track what + // happened during the operation. + var updateInput, userSelChange, changes, textChanged, selectionChanged, leaveInputAlone, + gutterDirty, callbacks; + // Current visible range (may be bigger than the view window). + var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0; + // bracketHighlighted is used to remember that a bracket has been + // marked. + var bracketHighlighted; + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + var maxLine = getLine(0), updateMaxLine = false, maxLineChanged = true; + var tabCache = {}; + var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll + var goalColumn = null; + + // Initialize the content. + operation(function(){setValue(options.value || ""); updateInput = false;})(); + var history = new History(); + + // Register our event handlers. + connect(scroller, "mousedown", operation(onMouseDown)); + connect(scroller, "dblclick", operation(onDoubleClick)); + connect(lineSpace, "selectstart", e_preventDefault); + // Gecko browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for Gecko. + if (!gecko) connect(scroller, "contextmenu", onContextMenu); + connect(scroller, "scroll", onScrollMain); + connect(scrollbar, "scroll", onScrollBar); + connect(scrollbar, "mousedown", function() {if (focused) setTimeout(focusInput, 0);}); + var resizeHandler = connect(window, "resize", function() { + if (wrapper.parentNode) updateDisplay(true); + else resizeHandler(); + }, true); + connect(input, "keyup", operation(onKeyUp)); + connect(input, "input", fastPoll); + connect(input, "keydown", operation(onKeyDown)); + connect(input, "keypress", operation(onKeyPress)); + connect(input, "focus", onFocus); + connect(input, "blur", onBlur); + + function drag_(e) { + if (options.onDragEvent && options.onDragEvent(instance, addStop(e))) return; + e_stop(e); + } + if (options.dragDrop) { + connect(scroller, "dragstart", onDragStart); + connect(scroller, "dragenter", drag_); + connect(scroller, "dragover", drag_); + connect(scroller, "drop", operation(onDrop)); + } + connect(scroller, "paste", function(){focusInput(); fastPoll();}); + connect(input, "paste", fastPoll); + connect(input, "cut", operation(function(){ + if (!options.readOnly) replaceSelection(""); + })); + + // Needed to handle Tab key in KHTML + if (khtml) connect(sizer, "mouseup", function() { + if (document.activeElement == input) input.blur(); + focusInput(); + }); + + // IE throws unspecified error in certain cases, when + // trying to access activeElement before onload + var hasFocus; try { hasFocus = (document.activeElement == input); } catch(e) { } + if (hasFocus || options.autofocus) setTimeout(onFocus, 20); + else onBlur(); + + function isLine(l) {return l >= 0 && l < doc.size;} + // The instance object that we'll return. Mostly calls out to + // local functions in the CodeMirror function. Some do some extra + // range checking and/or clipping. operation is used to wrap the + // call so that changes it makes are tracked, and the display is + // updated afterwards. + var instance = wrapper.CodeMirror = { + getValue: getValue, + setValue: operation(setValue), + getSelection: getSelection, + replaceSelection: operation(replaceSelection), + focus: function(){window.focus(); focusInput(); onFocus(); fastPoll();}, + setOption: function(option, value) { + var oldVal = options[option]; + options[option] = value; + if (option == "mode" || option == "indentUnit") loadMode(); + else if (option == "readOnly" && value == "nocursor") {onBlur(); input.blur();} + else if (option == "readOnly" && !value) {resetInput(true);} + else if (option == "theme") themeChanged(); + else if (option == "lineWrapping" && oldVal != value) operation(wrappingChanged)(); + else if (option == "tabSize") updateDisplay(true); + else if (option == "keyMap") keyMapChanged(); + if (option == "lineNumbers" || option == "gutter" || option == "firstLineNumber" || + option == "theme" || option == "lineNumberFormatter") { + gutterChanged(); + updateDisplay(true); + } + }, + getOption: function(option) {return options[option];}, + undo: operation(undo), + redo: operation(redo), + indentLine: operation(function(n, dir) { + if (typeof dir != "string") { + if (dir == null) dir = options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(n)) indentLine(n, dir); + }), + indentSelection: operation(indentSelected), + historySize: function() {return {undo: history.done.length, redo: history.undone.length};}, + clearHistory: function() {history = new History();}, + setHistory: function(histData) { + history = new History(); + history.done = histData.done; + history.undone = histData.undone; + }, + getHistory: function() { + history.time = 0; + return {done: history.done.concat([]), undone: history.undone.concat([])}; + }, + matchBrackets: operation(function(){matchBrackets(true);}), + getTokenAt: operation(function(pos) { + pos = clipPos(pos); + return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), options.tabSize, pos.ch); + }), + getStateAfter: function(line) { + line = clipLine(line == null ? doc.size - 1: line); + return getStateBefore(line + 1); + }, + cursorCoords: function(start, mode) { + if (start == null) start = sel.inverted; + return this.charCoords(start ? sel.from : sel.to, mode); + }, + charCoords: function(pos, mode) { + pos = clipPos(pos); + if (mode == "local") return localCoords(pos, false); + if (mode == "div") return localCoords(pos, true); + return pageCoords(pos); + }, + coordsChar: function(coords) { + var off = eltOffset(lineSpace); + return coordsChar(coords.x - off.left, coords.y - off.top); + }, + markText: operation(markText), + setBookmark: setBookmark, + findMarksAt: findMarksAt, + setMarker: operation(addGutterMarker), + clearMarker: operation(removeGutterMarker), + setLineClass: operation(setLineClass), + hideLine: operation(function(h) {return setLineHidden(h, true);}), + showLine: operation(function(h) {return setLineHidden(h, false);}), + onDeleteLine: function(line, f) { + if (typeof line == "number") { + if (!isLine(line)) return null; + line = getLine(line); + } + (line.handlers || (line.handlers = [])).push(f); + return line; + }, + lineInfo: lineInfo, + getViewport: function() { return {from: showingFrom, to: showingTo};}, + addWidget: function(pos, node, scroll, vert, horiz) { + pos = localCoords(clipPos(pos)); + var top = pos.yBot, left = pos.x; + node.style.position = "absolute"; + sizer.appendChild(node); + if (vert == "over") top = pos.y; + else if (vert == "near") { + var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()), + hspace = Math.max(sizer.clientWidth, lineSpace.clientWidth) - paddingLeft(); + if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight) + top = pos.y - node.offsetHeight; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = (top + paddingTop()) + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = (left + paddingLeft()) + "px"; + } + if (scroll) + scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + lineCount: function() {return doc.size;}, + clipPos: clipPos, + getCursor: function(start) { + if (start == null) start = sel.inverted; + return copyPos(start ? sel.from : sel.to); + }, + somethingSelected: function() {return !posEq(sel.from, sel.to);}, + setCursor: operation(function(line, ch, user) { + if (ch == null && typeof line.line == "number") setCursor(line.line, line.ch, user); + else setCursor(line, ch, user); + }), + setSelection: operation(function(from, to, user) { + (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from)); + }), + getLine: function(line) {if (isLine(line)) return getLine(line).text;}, + getLineHandle: function(line) {if (isLine(line)) return getLine(line);}, + setLine: operation(function(line, text) { + if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length}); + }), + removeLine: operation(function(line) { + if (isLine(line)) replaceRange("", {line: line, ch: 0}, clipPos({line: line+1, ch: 0})); + }), + replaceRange: operation(replaceRange), + getRange: function(from, to, lineSep) {return getRange(clipPos(from), clipPos(to), lineSep);}, + + triggerOnKeyDown: operation(onKeyDown), + execCommand: function(cmd) {return commands[cmd](instance);}, + // Stuff used by commands, probably not much use to outside code. + moveH: operation(moveH), + deleteH: operation(deleteH), + moveV: operation(moveV), + toggleOverwrite: function() { + if(overwrite){ + overwrite = false; + cursor.className = cursor.className.replace(" CodeMirror-overwrite", ""); + } else { + overwrite = true; + cursor.className += " CodeMirror-overwrite"; + } + }, + + posFromIndex: function(off) { + var lineNo = 0, ch; + doc.iter(0, doc.size, function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos({line: lineNo, ch: ch}); + }, + indexFromPos: function (coords) { + if (coords.line < 0 || coords.ch < 0) return 0; + var index = coords.ch; + doc.iter(0, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + scrollTo: function(x, y) { + if (x != null) scroller.scrollLeft = x; + if (y != null) scrollbar.scrollTop = scroller.scrollTop = y; + updateDisplay([]); + }, + getScrollInfo: function() { + return {x: scroller.scrollLeft, y: scrollbar.scrollTop, + height: scrollbar.scrollHeight, width: scroller.scrollWidth}; + }, + setSize: function(width, height) { + function interpret(val) { + val = String(val); + return /^\d+$/.test(val) ? val + "px" : val; + } + if (width != null) wrapper.style.width = interpret(width); + if (height != null) scroller.style.height = interpret(height); + instance.refresh(); + }, + + operation: function(f){return operation(f)();}, + compoundChange: function(f){return compoundChange(f);}, + refresh: function(){ + updateDisplay(true, null, lastScrollTop); + if (scrollbar.scrollHeight > lastScrollTop) + scrollbar.scrollTop = lastScrollTop; + }, + getInputField: function(){return input;}, + getWrapperElement: function(){return wrapper;}, + getScrollerElement: function(){return scroller;}, + getGutterElement: function(){return gutter;} + }; + + function getLine(n) { return getLineAt(doc, n); } + function updateLineHeight(line, height) { + gutterDirty = true; + var diff = height - line.height; + for (var n = line; n; n = n.parent) n.height += diff; + } + + function setValue(code) { + var top = {line: 0, ch: 0}; + updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length}, + splitLines(code), top, top); + updateInput = true; + } + function getValue(lineSep) { + var text = []; + doc.iter(0, doc.size, function(line) { text.push(line.text); }); + return text.join(lineSep || "\n"); + } + + function onScrollBar(e) { + if (scrollbar.scrollTop != lastScrollTop) { + lastScrollTop = scroller.scrollTop = scrollbar.scrollTop; + updateDisplay([]); + } + } + + function onScrollMain(e) { + if (options.fixedGutter && gutter.style.left != scroller.scrollLeft + "px") + gutter.style.left = scroller.scrollLeft + "px"; + if (scroller.scrollTop != lastScrollTop) { + lastScrollTop = scroller.scrollTop; + if (scrollbar.scrollTop != lastScrollTop) + scrollbar.scrollTop = lastScrollTop; + updateDisplay([]); + } + if (options.onScroll) options.onScroll(instance); + } + + function onMouseDown(e) { + setShift(e_prop(e, "shiftKey")); + // Check whether this is a click in a widget + for (var n = e_target(e); n != wrapper; n = n.parentNode) + if (n.parentNode == sizer && n != mover) return; + + // See if this is a click in the gutter + for (var n = e_target(e); n != wrapper; n = n.parentNode) + if (n.parentNode == gutterText) { + if (options.onGutterClick) + options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e); + return e_preventDefault(e); + } + + var start = posFromMouse(e); + + switch (e_button(e)) { + case 3: + if (gecko) onContextMenu(e); + return; + case 2: + if (start) setCursor(start.line, start.ch, true); + setTimeout(focusInput, 20); + e_preventDefault(e); + return; + } + // For button 1, if it was clicked inside the editor + // (posFromMouse returning non-null), we have to adjust the + // selection. + if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;} + + if (!focused) onFocus(); + + var now = +new Date, type = "single"; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) { + type = "triple"; + e_preventDefault(e); + setTimeout(focusInput, 20); + selectLine(start.line); + } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + e_preventDefault(e); + var word = findWordAt(start); + setSelectionUser(word.from, word.to); + } else { lastClick = {time: now, pos: start}; } + + function dragEnd(e2) { + if (webkit) scroller.draggable = false; + draggingText = false; + up(); drop(); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + setCursor(start.line, start.ch, true); + focusInput(); + } + } + var last = start, going; + if (options.dragDrop && dragAndDrop && !options.readOnly && !posEq(sel.from, sel.to) && + !posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") { + // Let the drag handler handle this. + if (webkit) scroller.draggable = true; + var up = connect(document, "mouseup", operation(dragEnd), true); + var drop = connect(scroller, "drop", operation(dragEnd), true); + draggingText = true; + // IE's approach to draggable + if (scroller.dragDrop) scroller.dragDrop(); + return; + } + e_preventDefault(e); + if (type == "single") setCursor(start.line, start.ch, true); + + var startstart = sel.from, startend = sel.to; + + function doSelect(cur) { + if (type == "single") { + setSelectionUser(start, cur); + } else if (type == "double") { + var word = findWordAt(cur); + if (posLess(cur, startstart)) setSelectionUser(word.from, startend); + else setSelectionUser(startstart, word.to); + } else if (type == "triple") { + if (posLess(cur, startstart)) setSelectionUser(startend, clipPos({line: cur.line, ch: 0})); + else setSelectionUser(startstart, clipPos({line: cur.line + 1, ch: 0})); + } + } + + function extend(e) { + var cur = posFromMouse(e, true); + if (cur && !posEq(cur, last)) { + if (!focused) onFocus(); + last = cur; + doSelect(cur); + updateInput = false; + var visible = visibleLines(); + if (cur.line >= visible.to || cur.line < visible.from) + going = setTimeout(operation(function(){extend(e);}), 150); + } + } + + function done(e) { + clearTimeout(going); + var cur = posFromMouse(e); + if (cur) doSelect(cur); + e_preventDefault(e); + focusInput(); + updateInput = true; + move(); up(); + } + var move = connect(document, "mousemove", operation(function(e) { + clearTimeout(going); + e_preventDefault(e); + if (!ie && !e_button(e)) done(e); + else extend(e); + }), true); + var up = connect(document, "mouseup", operation(done), true); + } + function onDoubleClick(e) { + for (var n = e_target(e); n != wrapper; n = n.parentNode) + if (n.parentNode == gutterText) return e_preventDefault(e); + e_preventDefault(e); + } + function onDrop(e) { + if (options.onDragEvent && options.onDragEvent(instance, addStop(e))) return; + e_preventDefault(e); + var pos = posFromMouse(e, true), files = e.dataTransfer.files; + if (!pos || options.readOnly) return; + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(pos); + operation(function() { + var end = replaceRange(text.join(""), pos, pos); + setSelectionUser(pos, end); + })(); + } + }; + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { + // Don't do a replace if the drop happened inside of the selected text. + if (draggingText && !(posLess(pos, sel.from) || posLess(sel.to, pos))) return; + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + compoundChange(function() { + var curFrom = sel.from, curTo = sel.to; + setSelectionUser(pos, pos); + if (draggingText) replaceRange("", curFrom, curTo); + replaceSelection(text); + focusInput(); + }); + } + } + catch(e){} + } + } + function onDragStart(e) { + var txt = getSelection(); + e.dataTransfer.setData("Text", txt); + + // Use dummy image instead of default browsers image. + if (gecko || chrome || opera) { + var img = elt('img'); + img.scr = 'data:image/gif;base64,R0lGODdhAgACAIAAAAAAAP///ywAAAAAAgACAAACAoRRADs='; //1x1 image + e.dataTransfer.setDragImage(img, 0, 0); + } + } + + function doHandleBinding(bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + var prevShift = shiftSelecting; + try { + if (options.readOnly) suppressEdits = true; + if (dropShift) shiftSelecting = null; + bound(instance); + } catch(e) { + if (e != Pass) throw e; + return false; + } finally { + shiftSelecting = prevShift; + suppressEdits = false; + } + return true; + } + var maybeTransition; + function handleKeyBinding(e) { + // Handle auto keymap transitions + var startMap = getKeyMap(options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(options.keyMap) == startMap) { + options.keyMap = (next.call ? next.call(null, instance) : next); + } + }, 50); + + var name = keyNames[e_prop(e, "keyCode")], handled = false; + if (name == null || e.altGraphKey) return false; + if (e_prop(e, "altKey")) name = "Alt-" + name; + if (e_prop(e, "ctrlKey")) name = "Ctrl-" + name; + if (e_prop(e, "metaKey")) name = "Cmd-" + name; + + var stopped = false; + function stop() { stopped = true; } + + if (e_prop(e, "shiftKey")) { + handled = lookupKey("Shift-" + name, options.extraKeys, options.keyMap, + function(b) {return doHandleBinding(b, true);}, stop) + || lookupKey(name, options.extraKeys, options.keyMap, function(b) { + if (typeof b == "string" && /^go[A-Z]/.test(b)) return doHandleBinding(b); + }, stop); + } else { + handled = lookupKey(name, options.extraKeys, options.keyMap, doHandleBinding, stop); + } + if (stopped) handled = false; + if (handled) { + e_preventDefault(e); + restartBlink(); + if (ie) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } + } + return handled; + } + function handleCharBinding(e, ch) { + var handled = lookupKey("'" + ch + "'", options.extraKeys, + options.keyMap, function(b) { return doHandleBinding(b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + if (!focused) onFocus(); + if (ie && e.keyCode == 27) { e.returnValue = false; } + if (pollingFast) { if (readInput()) pollingFast = false; } + if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return; + var code = e_prop(e, "keyCode"); + // IE does strange things with escape. + setShift(code == 16 || e_prop(e, "shiftKey")); + // First give onKeyEvent option a chance to handle this. + var handled = handleKeyBinding(e); + if (opera) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && e_prop(e, mac ? "metaKey" : "ctrlKey")) + replaceSelection(""); + } + } + function onKeyPress(e) { + if (pollingFast) readInput(); + if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return; + var keyCode = e_prop(e, "keyCode"), charCode = e_prop(e, "charCode"); + if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (options.electricChars && mode.electricChars && options.smartIndent && !options.readOnly) { + if (mode.electricChars.indexOf(ch) > -1) + setTimeout(operation(function() {indentLine(sel.to.line, "smart");}), 75); + } + if (handleCharBinding(e, ch)) return; + fastPoll(); + } + function onKeyUp(e) { + if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return; + if (e_prop(e, "keyCode") == 16) shiftSelecting = null; + } + + function onFocus() { + if (options.readOnly == "nocursor") return; + if (!focused) { + if (options.onFocus) options.onFocus(instance); + focused = true; + if (scroller.className.search(/\bCodeMirror-focused\b/) == -1) + scroller.className += " CodeMirror-focused"; + if (!leaveInputAlone) resetInput(true); + } + slowPoll(); + restartBlink(); + } + function onBlur() { + if (focused) { + if (options.onBlur) options.onBlur(instance); + focused = false; + if (bracketHighlighted) + operation(function(){ + if (bracketHighlighted) { bracketHighlighted(); bracketHighlighted = null; } + })(); + scroller.className = scroller.className.replace(" CodeMirror-focused", ""); + } + clearInterval(blinker); + setTimeout(function() {if (!focused) shiftSelecting = null;}, 150); + } + + // Replace the range from from to to by the strings in newText. + // Afterwards, set the selection to selFrom, selTo. + function updateLines(from, to, newText, selFrom, selTo) { + if (suppressEdits) return; + if (history) { + var old = []; + doc.iter(from.line, to.line + 1, function(line) { old.push(line.text); }); + history.addChange(from.line, newText.length, old); + while (history.done.length > options.undoDepth) history.done.shift(); + } + updateLinesNoUndo(from, to, newText, selFrom, selTo); + } + function unredoHelper(from, to) { + if (!from.length) return; + var set = from.pop(), out = []; + for (var i = set.length - 1; i >= 0; i -= 1) { + var change = set[i]; + var replaced = [], end = change.start + change.added; + doc.iter(change.start, end, function(line) { replaced.push(line.text); }); + out.push({start: change.start, added: change.old.length, old: replaced}); + var pos = {line: change.start + change.old.length - 1, + ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])}; + updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, change.old, pos, pos); + } + updateInput = true; + to.push(out); + } + function undo() {unredoHelper(history.done, history.undone);} + function redo() {unredoHelper(history.undone, history.done);} + + function updateLinesNoUndo(from, to, newText, selFrom, selTo) { + if (suppressEdits) return; + var recomputeMaxLength = false, maxLineLength = maxLine.text.length; + if (!options.lineWrapping) + doc.iter(from.line, to.line + 1, function(line) { + if (!line.hidden && line.text.length == maxLineLength) {recomputeMaxLength = true; return true;} + }); + if (from.line != to.line || newText.length > 1) gutterDirty = true; + + var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line); + // First adjust the line structure, taking some care to leave highlighting intact. + if (from.ch == 0 && to.ch == 0 && newText[newText.length - 1] == "") { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = [], prevLine = null; + if (from.line) { + prevLine = getLine(from.line - 1); + prevLine.fixMarkEnds(lastLine); + } else lastLine.fixMarkStarts(); + for (var i = 0, e = newText.length - 1; i < e; ++i) + added.push(Line.inheritMarks(newText[i], prevLine)); + if (nlines) doc.remove(from.line, nlines, callbacks); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (newText.length == 1) + firstLine.replace(from.ch, to.ch, newText[0]); + else { + lastLine = firstLine.split(to.ch, newText[newText.length-1]); + firstLine.replace(from.ch, null, newText[0]); + firstLine.fixMarkEnds(lastLine); + var added = []; + for (var i = 1, e = newText.length - 1; i < e; ++i) + added.push(Line.inheritMarks(newText[i], firstLine)); + added.push(lastLine); + doc.insert(from.line + 1, added); + } + } else if (newText.length == 1) { + firstLine.replace(from.ch, null, newText[0]); + lastLine.replace(null, to.ch, ""); + firstLine.append(lastLine); + doc.remove(from.line + 1, nlines, callbacks); + } else { + var added = []; + firstLine.replace(from.ch, null, newText[0]); + lastLine.replace(null, to.ch, newText[newText.length-1]); + firstLine.fixMarkEnds(lastLine); + for (var i = 1, e = newText.length - 1; i < e; ++i) + added.push(Line.inheritMarks(newText[i], firstLine)); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks); + doc.insert(from.line + 1, added); + } + if (options.lineWrapping) { + var perLine = Math.max(5, scroller.clientWidth / charWidth() - 3); + doc.iter(from.line, from.line + newText.length, function(line) { + if (line.hidden) return; + var guess = Math.ceil(line.text.length / perLine) || 1; + if (guess != line.height) updateLineHeight(line, guess); + }); + } else { + doc.iter(from.line, from.line + newText.length, function(line) { + var l = line.text; + if (!line.hidden && l.length > maxLineLength) { + maxLine = line; maxLineLength = l.length; maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) updateMaxLine = true; + } + + // Add these lines to the work array, so that they will be + // highlighted. Adjust work lines if lines were added/removed. + var newWork = [], lendiff = newText.length - nlines - 1; + for (var i = 0, l = work.length; i < l; ++i) { + var task = work[i]; + if (task < from.line) newWork.push(task); + else if (task > to.line) newWork.push(task + lendiff); + } + var hlEnd = from.line + Math.min(newText.length, 500); + highlightLines(from.line, hlEnd); + newWork.push(hlEnd); + work = newWork; + startWorker(100); + // Remember that these lines changed, for updating the display + changes.push({from: from.line, to: to.line + 1, diff: lendiff}); + var changeObj = {from: from, to: to, text: newText}; + if (textChanged) { + for (var cur = textChanged; cur.next; cur = cur.next) {} + cur.next = changeObj; + } else textChanged = changeObj; + + // Update the selection + function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;} + setSelection(clipPos(selFrom), clipPos(selTo), + updateLine(sel.from.line), updateLine(sel.to.line)); + } + + function needsScrollbar() { + var realHeight = doc.height * textHeight() + 2 * paddingTop(); + return realHeight * .99 > scroller.offsetHeight ? realHeight : false; + } + + function updateVerticalScroll(scrollTop) { + var scrollHeight = needsScrollbar(); + scrollbar.style.display = scrollHeight ? "block" : "none"; + if (scrollHeight) { + scrollbarInner.style.height = sizer.style.minHeight = scrollHeight + "px"; + scrollbar.style.height = scroller.clientHeight + "px"; + if (scrollTop != null) { + scrollbar.scrollTop = scroller.scrollTop = scrollTop; + // 'Nudge' the scrollbar to work around a Webkit bug where, + // in some situations, we'd end up with a scrollbar that + // reported its scrollTop (and looked) as expected, but + // *behaved* as if it was still in a previous state (i.e. + // couldn't scroll up, even though it appeared to be at the + // bottom). + if (webkit) setTimeout(function() { + if (scrollbar.scrollTop != scrollTop) return; + scrollbar.scrollTop = scrollTop + (scrollTop ? -1 : 1); + scrollbar.scrollTop = scrollTop; + }, 0); + } + } else { + sizer.style.minHeight = ""; + } + // Position the mover div to align with the current virtual scroll position + mover.style.top = displayOffset * textHeight() + "px"; + } + + function computeMaxLength() { + maxLine = getLine(0); maxLineChanged = true; + var maxLineLength = maxLine.text.length; + doc.iter(1, doc.size, function(line) { + var l = line.text; + if (!line.hidden && l.length > maxLineLength) { + maxLineLength = l.length; maxLine = line; + } + }); + updateMaxLine = false; + } + + function replaceRange(code, from, to) { + from = clipPos(from); + if (!to) to = from; else to = clipPos(to); + code = splitLines(code); + function adjustPos(pos) { + if (posLess(pos, from)) return pos; + if (!posLess(to, pos)) return end; + var line = pos.line + code.length - (to.line - from.line) - 1; + var ch = pos.ch; + if (pos.line == to.line) + ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0)); + return {line: line, ch: ch}; + } + var end; + replaceRange1(code, from, to, function(end1) { + end = end1; + return {from: adjustPos(sel.from), to: adjustPos(sel.to)}; + }); + return end; + } + function replaceSelection(code, collapse) { + replaceRange1(splitLines(code), sel.from, sel.to, function(end) { + if (collapse == "end") return {from: end, to: end}; + else if (collapse == "start") return {from: sel.from, to: sel.from}; + else return {from: sel.from, to: end}; + }); + } + function replaceRange1(code, from, to, computeSel) { + var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length; + var newSel = computeSel({line: from.line + code.length - 1, ch: endch}); + updateLines(from, to, code, newSel.from, newSel.to); + } + + function getRange(from, to, lineSep) { + var l1 = from.line, l2 = to.line; + if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch); + var code = [getLine(l1).text.slice(from.ch)]; + doc.iter(l1 + 1, l2, function(line) { code.push(line.text); }); + code.push(getLine(l2).text.slice(0, to.ch)); + return code.join(lineSep || "\n"); + } + function getSelection(lineSep) { + return getRange(sel.from, sel.to, lineSep); + } + + function slowPoll() { + if (pollingFast) return; + poll.set(options.pollInterval, function() { + startOperation(); + readInput(); + if (focused) slowPoll(); + endOperation(); + }); + } + function fastPoll() { + var missed = false; + pollingFast = true; + function p() { + startOperation(); + var changed = readInput(); + if (!changed && !missed) {missed = true; poll.set(60, p);} + else {pollingFast = false; slowPoll();} + endOperation(); + } + poll.set(20, p); + } + + // Previnput is a hack to work with IME. If we reset the textarea + // on every change, that breaks IME. So we look for changes + // compared to the previous content instead. (Modern browsers have + // events that indicate IME taking place, but these are not widely + // supported or compatible enough yet to rely on.) + var prevInput = ""; + function readInput() { + if (leaveInputAlone || !focused || hasSelection(input) || options.readOnly) return false; + var text = input.value; + if (text == prevInput) return false; + shiftSelecting = null; + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput[same] == text[same]) ++same; + if (same < prevInput.length) + sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)}; + else if (overwrite && posEq(sel.from, sel.to)) + sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))}; + replaceSelection(text.slice(same), "end"); + if (text.length > 1000) { input.value = prevInput = ""; } + else prevInput = text; + return true; + } + function resetInput(user) { + if (!posEq(sel.from, sel.to)) { + prevInput = ""; + input.value = getSelection(); + if (focused) selectInput(input); + } else if (user) prevInput = input.value = ""; + } + + function focusInput() { + if (options.readOnly != "nocursor") input.focus(); + } + + function scrollCursorIntoView() { + var coords = calculateCursorCoords(); + scrollIntoView(coords.x, coords.y, coords.x, coords.yBot); + if (!focused) return; + var box = sizer.getBoundingClientRect(), doScroll = null; + if (coords.y + box.top < 0) doScroll = true; + else if (coords.y + box.top + textHeight() > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null) { + var hidden = cursor.style.display == "none"; + if (hidden) { + cursor.style.display = ""; + cursor.style.left = coords.x + "px"; + cursor.style.top = (coords.y - displayOffset) + "px"; + } + cursor.scrollIntoView(doScroll); + if (hidden) cursor.style.display = "none"; + } + } + function calculateCursorCoords() { + var cursor = localCoords(sel.inverted ? sel.from : sel.to); + var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x; + return {x: x, y: cursor.y, yBot: cursor.yBot}; + } + function scrollIntoView(x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(x1, y1, x2, y2); + if (scrollPos.scrollLeft != null) {scroller.scrollLeft = scrollPos.scrollLeft;} + if (scrollPos.scrollTop != null) {scrollbar.scrollTop = scroller.scrollTop = scrollPos.scrollTop;} + } + function calculateScrollPos(x1, y1, x2, y2) { + var pl = paddingLeft(), pt = paddingTop(); + y1 += pt; y2 += pt; x1 += pl; x2 += pl; + var screen = scroller.clientHeight, screentop = scrollbar.scrollTop, result = {}; + var docBottom = needsScrollbar() || Infinity; + var atTop = y1 < pt + 10, atBottom = y2 + pt > docBottom - 10; + if (y1 < screentop) result.scrollTop = atTop ? 0 : Math.max(0, y1); + else if (y2 > screentop + screen) result.scrollTop = (atBottom ? docBottom : y2) - screen; + + var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft; + var gutterw = options.fixedGutter ? gutter.clientWidth : 0; + var atLeft = x1 < gutterw + pl + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + function visibleLines(scrollTop) { + var lh = textHeight(), top = (scrollTop != null ? scrollTop : scrollbar.scrollTop) - paddingTop(); + var fromHeight = Math.max(0, Math.floor(top / lh)); + var toHeight = Math.ceil((top + scroller.clientHeight) / lh); + return {from: lineAtHeight(doc, fromHeight), + to: lineAtHeight(doc, toHeight)}; + } + // Uses a set of changes plus the current scroll position to + // determine which DOM updates have to be made, and makes the + // updates. + function updateDisplay(changes, suppressCallback, scrollTop) { + if (!scroller.clientWidth) { + showingFrom = showingTo = displayOffset = 0; + return; + } + // Compute the new visible window + // If scrollTop is specified, use that to determine which lines + // to render instead of the current scrollbar position. + var visible = visibleLines(scrollTop); + // Bail out if the visible area is already rendered and nothing changed. + if (changes !== true && changes.length == 0 && visible.from > showingFrom && visible.to < showingTo) { + updateVerticalScroll(scrollTop); + return; + } + var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100); + if (showingFrom < from && from - showingFrom < 20) from = showingFrom; + if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo); + + // Create a range of theoretically intact lines, and punch holes + // in that using the change info. + var intact = changes === true ? [] : + computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes); + // Clip off the parts that won't be visible + var intactLines = 0; + for (var i = 0; i < intact.length; ++i) { + var range = intact[i]; + if (range.from < from) {range.domStart += (from - range.from); range.from = from;} + if (range.to > to) range.to = to; + if (range.from >= range.to) intact.splice(i--, 1); + else intactLines += range.to - range.from; + } + if (intactLines == to - from && from == showingFrom && to == showingTo) { + updateVerticalScroll(scrollTop); + return; + } + intact.sort(function(a, b) {return a.domStart - b.domStart;}); + + var th = textHeight(), gutterDisplay = gutter.style.display; + lineDiv.style.display = "none"; + patchDisplay(from, to, intact); + lineDiv.style.display = gutter.style.display = ""; + + var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th; + // This is just a bogus formula that detects when the editor is + // resized or the font size changes. + if (different) lastSizeC = scroller.clientHeight + th; + if (from != showingFrom || to != showingTo && options.onViewportChange) + setTimeout(function(){ + if (options.onViewportChange) options.onViewportChange(instance, from, to); + }); + showingFrom = from; showingTo = to; + displayOffset = heightAtLine(doc, from); + + // Since this is all rather error prone, it is honoured with the + // only assertion in the whole file. + if (lineDiv.childNodes.length != showingTo - showingFrom) + throw new Error("BAD PATCH! " + JSON.stringify(intact) + " size=" + (showingTo - showingFrom) + + " nodes=" + lineDiv.childNodes.length); + + function checkHeights() { + var curNode = lineDiv.firstChild, heightChanged = false; + doc.iter(showingFrom, showingTo, function(line) { + // Work around bizarro IE7 bug where, sometimes, our curNode + // is magically replaced with a new node in the DOM, leaving + // us with a reference to an orphan (nextSibling-less) node. + if (!curNode) return; + if (!line.hidden) { + var height = Math.round(curNode.offsetHeight / th) || 1; + if (line.height != height) { + updateLineHeight(line, height); + gutterDirty = heightChanged = true; + } + } + curNode = curNode.nextSibling; + }); + return heightChanged; + } + + if (options.lineWrapping) checkHeights(); + + gutter.style.display = gutterDisplay; + if (different || gutterDirty) { + // If the gutter grew in size, re-check heights. If those changed, re-draw gutter. + updateGutter() && options.lineWrapping && checkHeights() && updateGutter(); + } + updateVerticalScroll(scrollTop); + updateSelection(); + if (!suppressCallback && options.onUpdate) options.onUpdate(instance); + return true; + } + + function computeIntact(intact, changes) { + for (var i = 0, l = changes.length || 0; i < l; ++i) { + var change = changes[i], intact2 = [], diff = change.diff || 0; + for (var j = 0, l2 = intact.length; j < l2; ++j) { + var range = intact[j]; + if (change.to <= range.from && change.diff) + intact2.push({from: range.from + diff, to: range.to + diff, + domStart: range.domStart}); + else if (change.to <= range.from || change.from >= range.to) + intact2.push(range); + else { + if (change.from > range.from) + intact2.push({from: range.from, to: change.from, domStart: range.domStart}); + if (change.to < range.to) + intact2.push({from: change.to + diff, to: range.to + diff, + domStart: range.domStart + (change.to - range.from)}); + } + } + intact = intact2; + } + return intact; + } + + function patchDisplay(from, to, intact) { + function killNode(node) { + var tmp = node.nextSibling; + node.parentNode.removeChild(node); + return tmp; + } + // The first pass removes the DOM nodes that aren't intact. + if (!intact.length) removeChildren(lineDiv); + else { + var domPos = 0, curNode = lineDiv.firstChild, n; + for (var i = 0; i < intact.length; ++i) { + var cur = intact[i]; + while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;} + for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;} + } + while (curNode) curNode = killNode(curNode); + } + // This pass fills in the lines that actually changed. + var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from; + doc.iter(from, to, function(line) { + if (nextIntact && nextIntact.to == j) nextIntact = intact.shift(); + if (!nextIntact || nextIntact.from > j) { + if (line.hidden) var lineElement = elt("pre"); + else { + var lineElement = line.getElement(makeTab); + if (line.className) lineElement.className = line.className; + // Kludge to make sure the styled element lies behind the selection (by z-index) + if (line.bgClassName) { + var pre = elt("pre", "\u00a0", line.bgClassName, "position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: -2"); + lineElement = elt("div", [pre, lineElement], null, "position: relative"); + } + } + lineDiv.insertBefore(lineElement, curNode); + } else { + curNode = curNode.nextSibling; + } + ++j; + }); + } + + function updateGutter() { + if (!options.gutter && !options.lineNumbers) return; + var hText = mover.offsetHeight, hEditor = scroller.clientHeight; + gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + "px"; + var fragment = document.createDocumentFragment(), i = showingFrom, normalNode; + doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) { + if (line.hidden) { + fragment.appendChild(elt("pre")); + } else { + var marker = line.gutterMarker; + var text = options.lineNumbers ? options.lineNumberFormatter(i + options.firstLineNumber) : null; + if (marker && marker.text) + text = marker.text.replace("%N%", text != null ? text : ""); + else if (text == null) + text = "\u00a0"; + var markerElement = fragment.appendChild(elt("pre", null, marker && marker.style)); + markerElement.innerHTML = text; + for (var j = 1; j < line.height; ++j) { + markerElement.appendChild(elt("br")); + markerElement.appendChild(document.createTextNode("\u00a0")); + } + if (!marker) normalNode = i; + } + ++i; + }); + gutter.style.display = "none"; + removeChildrenAndAdd(gutterText, fragment); + // Make sure scrolling doesn't cause number gutter size to pop + if (normalNode != null && options.lineNumbers) { + var node = gutterText.childNodes[normalNode - showingFrom]; + var minwidth = String(doc.size).length, val = eltText(node.firstChild), pad = ""; + while (val.length + pad.length < minwidth) pad += "\u00a0"; + if (pad) node.insertBefore(document.createTextNode(pad), node.firstChild); + } + gutter.style.display = ""; + var resized = Math.abs((parseInt(lineSpace.style.marginLeft) || 0) - gutter.offsetWidth) > 2; + lineSpace.style.marginLeft = gutter.offsetWidth + "px"; + gutterDirty = false; + return resized; + } + function updateSelection() { + var collapsed = posEq(sel.from, sel.to); + var fromPos = localCoords(sel.from, true); + var toPos = collapsed ? fromPos : localCoords(sel.to, true); + var headPos = sel.inverted ? fromPos : toPos, th = textHeight(); + var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv); + inputDiv.style.top = Math.max(0, Math.min(scroller.offsetHeight, headPos.y + lineOff.top - wrapOff.top)) + "px"; + inputDiv.style.left = Math.max(0, Math.min(scroller.offsetWidth, headPos.x + lineOff.left - wrapOff.left)) + "px"; + if (collapsed) { + cursor.style.top = headPos.y + "px"; + cursor.style.left = (options.lineWrapping ? Math.min(headPos.x, lineSpace.offsetWidth) : headPos.x) + "px"; + cursor.style.display = ""; + selectionDiv.style.display = "none"; + } else { + var sameLine = fromPos.y == toPos.y, fragment = document.createDocumentFragment(); + var clientWidth = lineSpace.clientWidth || lineSpace.offsetWidth; + var clientHeight = lineSpace.clientHeight || lineSpace.offsetHeight; + var add = function(left, top, right, height) { + var rstyle = quirksMode ? "width: " + (!right ? clientWidth : clientWidth - right - left) + "px" + : "right: " + right + "px"; + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; " + rstyle + "; height: " + height + "px")); + }; + if (sel.from.ch && fromPos.y >= 0) { + var right = sameLine ? clientWidth - toPos.x : 0; + add(fromPos.x, fromPos.y, right, th); + } + var middleStart = Math.max(0, fromPos.y + (sel.from.ch ? th : 0)); + var middleHeight = Math.min(toPos.y, clientHeight) - middleStart; + if (middleHeight > 0.2 * th) + add(0, middleStart, 0, middleHeight); + if ((!sameLine || !sel.from.ch) && toPos.y < clientHeight - .5 * th) + add(0, toPos.y, clientWidth - toPos.x, th); + removeChildrenAndAdd(selectionDiv, fragment); + cursor.style.display = "none"; + selectionDiv.style.display = ""; + } + } + + function setShift(val) { + if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from); + else shiftSelecting = null; + } + function setSelectionUser(from, to) { + var sh = shiftSelecting && clipPos(shiftSelecting); + if (sh) { + if (posLess(sh, from)) from = sh; + else if (posLess(to, sh)) to = sh; + } + setSelection(from, to); + userSelChange = true; + } + // Update the selection. Last two args are only used by + // updateLines, since they have to be expressed in the line + // numbers before the update. + function setSelection(from, to, oldFrom, oldTo) { + goalColumn = null; + if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;} + if (posEq(sel.from, from) && posEq(sel.to, to)) return; + if (posLess(to, from)) {var tmp = to; to = from; from = tmp;} + + // Skip over hidden lines. + if (from.line != oldFrom) { + var from1 = skipHidden(from, oldFrom, sel.from.ch); + // If there is no non-hidden line left, force visibility on current line + if (!from1) setLineHidden(from.line, false); + else from = from1; + } + if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch); + + if (posEq(from, to)) sel.inverted = false; + else if (posEq(from, sel.to)) sel.inverted = false; + else if (posEq(to, sel.from)) sel.inverted = true; + + if (options.autoClearEmptyLines && posEq(sel.from, sel.to)) { + var head = sel.inverted ? from : to; + if (head.line != sel.from.line && sel.from.line < doc.size) { + var oldLine = getLine(sel.from.line); + if (/^\s+$/.test(oldLine.text)) + setTimeout(operation(function() { + if (oldLine.parent && /^\s+$/.test(oldLine.text)) { + var no = lineNo(oldLine); + replaceRange("", {line: no, ch: 0}, {line: no, ch: oldLine.text.length}); + } + }, 10)); + } + } + + sel.from = from; sel.to = to; + selectionChanged = true; + } + function skipHidden(pos, oldLine, oldCh) { + function getNonHidden(dir) { + var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1; + while (lNo != end) { + var line = getLine(lNo); + if (!line.hidden) { + var ch = pos.ch; + if (toEnd || ch > oldCh || ch > line.text.length) ch = line.text.length; + return {line: lNo, ch: ch}; + } + lNo += dir; + } + } + var line = getLine(pos.line); + var toEnd = pos.ch == line.text.length && pos.ch != oldCh; + if (!line.hidden) return pos; + if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1); + else return getNonHidden(-1) || getNonHidden(1); + } + function setCursor(line, ch, user) { + var pos = clipPos({line: line, ch: ch || 0}); + (user ? setSelectionUser : setSelection)(pos, pos); + } + + function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));} + function clipPos(pos) { + if (pos.line < 0) return {line: 0, ch: 0}; + if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length}; + var ch = pos.ch, linelen = getLine(pos.line).text.length; + if (ch == null || ch > linelen) return {line: pos.line, ch: linelen}; + else if (ch < 0) return {line: pos.line, ch: 0}; + else return pos; + } + + function findPosH(dir, unit) { + var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch; + var lineObj = getLine(line); + function findNextLine() { + for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) { + var lo = getLine(l); + if (!lo.hidden) { line = l; lineObj = lo; return true; } + } + } + function moveOnce(boundToLine) { + if (ch == (dir < 0 ? 0 : lineObj.text.length)) { + if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0; + else return false; + } else ch += dir; + return true; + } + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word") { + var sawWord = false; + for (;;) { + if (dir < 0) if (!moveOnce()) break; + if (isWordChar(lineObj.text.charAt(ch))) sawWord = true; + else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;} + if (dir > 0) if (!moveOnce()) break; + } + } + return {line: line, ch: ch}; + } + function moveH(dir, unit) { + var pos = dir < 0 ? sel.from : sel.to; + if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit); + setCursor(pos.line, pos.ch, true); + } + function deleteH(dir, unit) { + if (!posEq(sel.from, sel.to)) replaceRange("", sel.from, sel.to); + else if (dir < 0) replaceRange("", findPosH(dir, unit), sel.to); + else replaceRange("", sel.from, findPosH(dir, unit)); + userSelChange = true; + } + function moveV(dir, unit) { + var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true); + if (goalColumn != null) pos.x = goalColumn; + if (unit == "page") { + var screen = Math.min(scroller.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var target = coordsChar(pos.x, pos.y + screen * dir); + } else if (unit == "line") { + var th = textHeight(); + var target = coordsChar(pos.x, pos.y + .5 * th + dir * th); + } + if (unit == "page") scrollbar.scrollTop += localCoords(target, true).y - pos.y; + setCursor(target.line, target.ch, true); + goalColumn = pos.x; + } + + function findWordAt(pos) { + var line = getLine(pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + if (pos.after === false || end == line.length) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar : + /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : + function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return {from: {line: pos.line, ch: start}, to: {line: pos.line, ch: end}}; + } + function selectLine(line) { + setSelectionUser({line: line, ch: 0}, clipPos({line: line + 1, ch: 0})); + } + function indentSelected(mode) { + if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode); + var e = sel.to.line - (sel.to.ch ? 0 : 1); + for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode); + } + + function indentLine(n, how) { + if (!how) how = "add"; + if (how == "smart") { + if (!mode.indent) how = "prev"; + else var state = getStateBefore(n); + } + + var line = getLine(n), curSpace = line.indentation(options.tabSize), + curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (how == "smart") { + indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) how = "prev"; + } + if (how == "prev") { + if (n) indentation = getLine(n-1).indentation(options.tabSize); + else indentation = 0; + } + else if (how == "add") indentation = curSpace + options.indentUnit; + else if (how == "subtract") indentation = curSpace - options.indentUnit; + indentation = Math.max(0, indentation); + var diff = indentation - curSpace; + + var indentString = "", pos = 0; + if (options.indentWithTabs) + for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += "\t";} + while (pos < indentation) {++pos; indentString += " ";} + + if (indentString != curSpaceString) + replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length}); + } + + function loadMode() { + mode = CodeMirror.getMode(options, options.mode); + doc.iter(0, doc.size, function(line) { line.stateAfter = null; }); + work = [0]; + startWorker(); + } + function gutterChanged() { + var visible = options.gutter || options.lineNumbers; + gutter.style.display = visible ? "" : "none"; + if (visible) gutterDirty = true; + else lineDiv.parentNode.style.marginLeft = 0; + } + function wrappingChanged(from, to) { + if (options.lineWrapping) { + wrapper.className += " CodeMirror-wrap"; + var perLine = scroller.clientWidth / charWidth() - 3; + doc.iter(0, doc.size, function(line) { + if (line.hidden) return; + var guess = Math.ceil(line.text.length / perLine) || 1; + if (guess != 1) updateLineHeight(line, guess); + }); + lineSpace.style.minWidth = widthForcer.style.left = ""; + } else { + wrapper.className = wrapper.className.replace(" CodeMirror-wrap", ""); + computeMaxLength(); + doc.iter(0, doc.size, function(line) { + if (line.height != 1 && !line.hidden) updateLineHeight(line, 1); + }); + } + changes.push({from: 0, to: doc.size}); + } + function makeTab(col) { + var w = options.tabSize - col % options.tabSize, cached = tabCache[w]; + if (cached) return cached; + for (var str = "", i = 0; i < w; ++i) str += " "; + var span = elt("span", str, "cm-tab"); + return (tabCache[w] = {element: span, width: w}); + } + function themeChanged() { + scroller.className = scroller.className.replace(/\s*cm-s-\S+/g, "") + + options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + } + function keyMapChanged() { + var style = keyMap[options.keyMap].style; + wrapper.className = wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + } + + function TextMarker() { this.set = []; } + TextMarker.prototype.clear = operation(function() { + var min = Infinity, max = -Infinity; + for (var i = 0, e = this.set.length; i < e; ++i) { + var line = this.set[i], mk = line.marked; + if (!mk || !line.parent) continue; + var lineN = lineNo(line); + min = Math.min(min, lineN); max = Math.max(max, lineN); + for (var j = 0; j < mk.length; ++j) + if (mk[j].marker == this) mk.splice(j--, 1); + } + if (min != Infinity) + changes.push({from: min, to: max + 1}); + }); + TextMarker.prototype.find = function() { + var from, to; + for (var i = 0, e = this.set.length; i < e; ++i) { + var line = this.set[i], mk = line.marked; + for (var j = 0; j < mk.length; ++j) { + var mark = mk[j]; + if (mark.marker == this) { + if (mark.from != null || mark.to != null) { + var found = lineNo(line); + if (found != null) { + if (mark.from != null) from = {line: found, ch: mark.from}; + if (mark.to != null) to = {line: found, ch: mark.to}; + } + } + } + } + } + return {from: from, to: to}; + }; + + function markText(from, to, className) { + from = clipPos(from); to = clipPos(to); + var tm = new TextMarker(); + if (!posLess(from, to)) return tm; + function add(line, from, to, className) { + getLine(line).addMark(new MarkedText(from, to, className, tm)); + } + if (from.line == to.line) add(from.line, from.ch, to.ch, className); + else { + add(from.line, from.ch, null, className); + for (var i = from.line + 1, e = to.line; i < e; ++i) + add(i, null, null, className); + add(to.line, null, to.ch, className); + } + changes.push({from: from.line, to: to.line + 1}); + return tm; + } + + function setBookmark(pos) { + pos = clipPos(pos); + var bm = new Bookmark(pos.ch); + getLine(pos.line).addMark(bm); + return bm; + } + + function findMarksAt(pos) { + pos = clipPos(pos); + var markers = [], marked = getLine(pos.line).marked; + if (!marked) return markers; + for (var i = 0, e = marked.length; i < e; ++i) { + var m = marked[i]; + if ((m.from == null || m.from <= pos.ch) && + (m.to == null || m.to >= pos.ch)) + markers.push(m.marker || m); + } + return markers; + } + + function addGutterMarker(line, text, className) { + if (typeof line == "number") line = getLine(clipLine(line)); + line.gutterMarker = {text: text, style: className}; + gutterDirty = true; + return line; + } + function removeGutterMarker(line) { + if (typeof line == "number") line = getLine(clipLine(line)); + line.gutterMarker = null; + gutterDirty = true; + } + + function changeLine(handle, op) { + var no = handle, line = handle; + if (typeof handle == "number") line = getLine(clipLine(handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) changes.push({from: no, to: no + 1}); + else return null; + return line; + } + function setLineClass(handle, className, bgClassName) { + return changeLine(handle, function(line) { + if (line.className != className || line.bgClassName != bgClassName) { + line.className = className; + line.bgClassName = bgClassName; + return true; + } + }); + } + function setLineHidden(handle, hidden) { + return changeLine(handle, function(line, no) { + if (line.hidden != hidden) { + line.hidden = hidden; + if (!options.lineWrapping) { + if (hidden && line.text.length == maxLine.text.length) { + updateMaxLine = true; + } else if (!hidden && line.text.length > maxLine.text.length) { + maxLine = line; updateMaxLine = false; + } + } + updateLineHeight(line, hidden ? 0 : 1); + var fline = sel.from.line, tline = sel.to.line; + if (hidden && (fline == no || tline == no)) { + var from = fline == no ? skipHidden({line: fline, ch: 0}, fline, 0) : sel.from; + var to = tline == no ? skipHidden({line: tline, ch: 0}, tline, 0) : sel.to; + // Can't hide the last visible line, we'd have no place to put the cursor + if (!to) return; + setSelection(from, to); + } + return (gutterDirty = true); + } + }); + } + + function lineInfo(line) { + if (typeof line == "number") { + if (!isLine(line)) return null; + var n = line; + line = getLine(line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + var marker = line.gutterMarker; + return {line: n, handle: line, text: line.text, markerText: marker && marker.text, + markerClass: marker && marker.style, lineClass: line.className, bgClass: line.bgClassName}; + } + + // These are used to go from pixel positions to character + // positions, taking varying character widths into account. + function charFromX(line, x) { + if (x <= 0) return 0; + var lineObj = getLine(line), text = lineObj.text; + function getX(len) { + return measureLine(lineObj, len).left; + } + var from = 0, fromX = 0, to = text.length, toX; + // Guess a suitable upper bound for our search. + var estimated = Math.min(to, Math.ceil(x / charWidth())); + for (;;) { + var estX = getX(estimated); + if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2)); + else {toX = estX; to = estimated; break;} + } + if (x > toX) return to; + // Try to guess a suitable lower bound as well. + estimated = Math.floor(to * 0.8); estX = getX(estimated); + if (estX < x) {from = estimated; fromX = estX;} + // Do a binary search between these bounds. + for (;;) { + if (to - from <= 1) return (toX - x > x - fromX) ? from : to; + var middle = Math.ceil((from + to) / 2), middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX;} + else {from = middle; fromX = middleX;} + } + } + + function measureLine(line, ch) { + if (ch == 0) return {top: 0, left: 0}; + var wbr = options.lineWrapping && ch < line.text.length && + spanAffectsWrapping.test(line.text.slice(ch - 1, ch + 1)); + var pre = line.getElement(makeTab, ch, wbr); + removeChildrenAndAdd(measure, pre); + var anchor = pre.anchor; + var top = anchor.offsetTop, left = anchor.offsetLeft; + // Older IEs report zero offsets for spans directly after a wrap + if (ie && top == 0 && left == 0) { + var backup = elt("span", "x"); + anchor.parentNode.insertBefore(backup, anchor.nextSibling); + top = backup.offsetTop; + } + return {top: top, left: left}; + } + function localCoords(pos, inLineWrap) { + var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0)); + if (pos.ch == 0) x = 0; + else { + var sp = measureLine(getLine(pos.line), pos.ch); + x = sp.left; + if (options.lineWrapping) y += Math.max(0, sp.top); + } + return {x: x, y: y, yBot: y + lh}; + } + // Coords must be lineSpace-local + function coordsChar(x, y) { + var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th); + if (heightPos < 0) return {line: 0, ch: 0}; + var lineNo = lineAtHeight(doc, heightPos); + if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length}; + var lineObj = getLine(lineNo), text = lineObj.text; + var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0; + if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0}; + var wrongLine = false; + function getX(len) { + var sp = measureLine(lineObj, len); + if (tw) { + var off = Math.round(sp.top / th); + wrongLine = off != innerOff; + return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth); + } + return sp.left; + } + var from = 0, fromX = 0, to = text.length, toX; + // Guess a suitable upper bound for our search. + var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw)); + for (;;) { + var estX = getX(estimated); + if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2)); + else {toX = estX; to = estimated; break;} + } + if (x > toX) return {line: lineNo, ch: to}; + // Try to guess a suitable lower bound as well. + estimated = Math.floor(to * 0.8); estX = getX(estimated); + if (estX < x) {from = estimated; fromX = estX;} + // Do a binary search between these bounds. + for (;;) { + if (to - from <= 1) { + var after = x - fromX < toX - x; + return {line: lineNo, ch: after ? from : to, after: after}; + } + var middle = Math.ceil((from + to) / 2), middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (wrongLine) toX += 1000; } + else {from = middle; fromX = middleX;} + } + } + function pageCoords(pos) { + var local = localCoords(pos, true), off = eltOffset(lineSpace); + return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot}; + } + + var cachedHeight, cachedHeightFor, measurePre; + function textHeight() { + if (measurePre == null) { + measurePre = elt("pre"); + for (var i = 0; i < 49; ++i) { + measurePre.appendChild(document.createTextNode("x")); + measurePre.appendChild(elt("br")); + } + measurePre.appendChild(document.createTextNode("x")); + } + var offsetHeight = lineDiv.clientHeight; + if (offsetHeight == cachedHeightFor) return cachedHeight; + cachedHeightFor = offsetHeight; + removeChildrenAndAdd(measure, measurePre.cloneNode(true)); + cachedHeight = measure.firstChild.offsetHeight / 50 || 1; + removeChildren(measure); + return cachedHeight; + } + var cachedWidth, cachedWidthFor = 0; + function charWidth() { + if (scroller.clientWidth == cachedWidthFor) return cachedWidth; + cachedWidthFor = scroller.clientWidth; + var anchor = elt("span", "x"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(measure, pre); + return (cachedWidth = anchor.offsetWidth || 10); + } + function paddingTop() {return lineSpace.offsetTop;} + function paddingLeft() {return lineSpace.offsetLeft;} + + function posFromMouse(e, liberal) { + var offW = eltOffset(scroller, true), x, y; + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX; y = e.clientY; } catch (e) { return null; } + // This is a mess of a heuristic to try and determine whether a + // scroll-bar was clicked or not, and to return null if one was + // (and !liberal). + if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight)) + return null; + var offL = eltOffset(lineSpace, true); + return coordsChar(x - offL.left, y - offL.top); + } + function onContextMenu(e) { + var pos = posFromMouse(e), scrollPos = scrollbar.scrollTop; + if (!pos || opera) return; // Opera is difficult. + if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)) + operation(setCursor)(pos.line, pos.ch); + + var oldCSS = input.style.cssText; + inputDiv.style.position = "absolute"; + input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; " + + "border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + leaveInputAlone = true; + var val = input.value = getSelection(); + focusInput(); + selectInput(input); + function rehide() { + var newVal = splitLines(input.value).join("\n"); + if (newVal != val && !options.readOnly) operation(replaceSelection)(newVal, "end"); + inputDiv.style.position = "relative"; + input.style.cssText = oldCSS; + if (ie_lt9) scrollbar.scrollTop = scrollPos; + leaveInputAlone = false; + resetInput(true); + slowPoll(); + } + + if (gecko) { + e_stop(e); + var mouseup = connect(window, "mouseup", function() { + mouseup(); + setTimeout(rehide, 20); + }, true); + } else { + setTimeout(rehide, 50); + } + } + + // Cursor-blinking + function restartBlink() { + clearInterval(blinker); + var on = true; + cursor.style.visibility = ""; + blinker = setInterval(function() { + cursor.style.visibility = (on = !on) ? "" : "hidden"; + }, options.cursorBlinkRate); + } + + var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; + function matchBrackets(autoclear) { + var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1; + var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; + if (!match) return; + var ch = match.charAt(0), forward = match.charAt(1) == ">", d = forward ? 1 : -1, st = line.styles; + for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2) + if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;} + + var stack = [line.text.charAt(pos)], re = /[(){}[\]]/; + function scan(line, from, to) { + if (!line.text) return; + var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur; + for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) { + var text = st[i]; + if (st[i+1] != style) {pos += d * text.length; continue;} + for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) { + if (pos >= from && pos < to && re.test(cur = text.charAt(j))) { + var match = matching[cur]; + if (match.charAt(1) == ">" == forward) stack.push(cur); + else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false}; + else if (!stack.length) return {pos: pos, match: true}; + } + } + } + } + for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) { + var line = getLine(i), first = i == head.line; + var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length); + if (found) break; + } + if (!found) found = {pos: null, match: false}; + var style = found.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; + var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style), + two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style); + var clear = operation(function(){one.clear(); two && two.clear();}); + if (autoclear) setTimeout(clear, 800); + else bracketHighlighted = clear; + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(n) { + var minindent, minline; + for (var search = n, lim = n - 40; search > lim; --search) { + if (search == 0) return 0; + var line = getLine(search-1); + if (line.stateAfter) return search; + var indented = line.indentation(options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + function getStateBefore(n) { + var start = findStartLine(n), state = start && getLine(start-1).stateAfter; + if (!state) state = startState(mode); + else state = copyState(mode, state); + doc.iter(start, n, function(line) { + line.highlight(mode, state, options.tabSize); + line.stateAfter = copyState(mode, state); + }); + if (start < n) changes.push({from: start, to: n}); + if (n < doc.size && !getLine(n).stateAfter) work.push(n); + return state; + } + function highlightLines(start, end) { + var state = getStateBefore(start); + doc.iter(start, end, function(line) { + line.highlight(mode, state, options.tabSize); + line.stateAfter = copyState(mode, state); + }); + } + function highlightWorker() { + var end = +new Date + options.workTime; + var foundWork = work.length; + while (work.length) { + if (!getLine(showingFrom).stateAfter) var task = showingFrom; + else var task = work.pop(); + if (task >= doc.size) continue; + var start = findStartLine(task), state = start && getLine(start-1).stateAfter; + if (state) state = copyState(mode, state); + else state = startState(mode); + + var unchanged = 0, compare = mode.compareStates, realChange = false, + i = start, bail = false; + doc.iter(i, doc.size, function(line) { + var hadState = line.stateAfter; + if (+new Date > end) { + work.push(i); + startWorker(options.workDelay); + if (realChange) changes.push({from: task, to: i + 1}); + return (bail = true); + } + var changed = line.highlight(mode, state, options.tabSize); + if (changed) realChange = true; + line.stateAfter = copyState(mode, state); + var done = null; + if (compare) { + var same = hadState && compare(hadState, state); + if (same != Pass) done = !!same; + } + if (done == null) { + if (changed !== false || !hadState) unchanged = 0; + else if (++unchanged > 3 && (!mode.indent || mode.indent(hadState, "") == mode.indent(state, ""))) + done = true; + } + if (done) return true; + ++i; + }); + if (bail) return; + if (realChange) changes.push({from: task, to: i + 1}); + } + if (foundWork && options.onHighlightComplete) + options.onHighlightComplete(instance); + } + function startWorker(time) { + if (!work.length) return; + highlight.set(time, operation(highlightWorker)); + } + + // Operations are used to wrap changes in such a way that each + // change won't have to update the cursor and display (which would + // be awkward, slow, and error-prone), but instead updates are + // batched and then all combined and executed at once. + function startOperation() { + updateInput = userSelChange = textChanged = null; + changes = []; selectionChanged = false; callbacks = []; + } + function endOperation() { + if (updateMaxLine) computeMaxLength(); + if (maxLineChanged && !options.lineWrapping) { + var cursorWidth = widthForcer.offsetWidth, left = measureLine(maxLine, maxLine.text.length).left; + if (!ie_lt8) { + widthForcer.style.left = left + "px"; + lineSpace.style.minWidth = (left + cursorWidth) + "px"; + } + maxLineChanged = false; + } + var newScrollPos, updated; + if (selectionChanged) { + var coords = calculateCursorCoords(); + newScrollPos = calculateScrollPos(coords.x, coords.y, coords.x, coords.yBot); + } + if (changes.length || newScrollPos && newScrollPos.scrollTop != null) + updated = updateDisplay(changes, true, newScrollPos && newScrollPos.scrollTop); + if (!updated) { + if (selectionChanged) updateSelection(); + if (gutterDirty) updateGutter(); + } + if (newScrollPos) scrollCursorIntoView(); + if (selectionChanged) restartBlink(); + + if (focused && !leaveInputAlone && + (updateInput === true || (updateInput !== false && selectionChanged))) + resetInput(userSelChange); + + if (selectionChanged && options.matchBrackets) + setTimeout(operation(function() { + if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;} + if (posEq(sel.from, sel.to)) matchBrackets(false); + }), 20); + var sc = selectionChanged, cbs = callbacks; // these can be reset by callbacks + if (textChanged && options.onChange && instance) + options.onChange(instance, textChanged); + if (sc && options.onCursorActivity) + options.onCursorActivity(instance); + for (var i = 0; i < cbs.length; ++i) cbs[i](instance); + if (updated && options.onUpdate) options.onUpdate(instance); + } + var nestedOperation = 0; + function operation(f) { + return function() { + if (!nestedOperation++) startOperation(); + try {var result = f.apply(this, arguments);} + finally {if (!--nestedOperation) endOperation();} + return result; + }; + } + + function compoundChange(f) { + history.startCompound(); + try { return f(); } finally { history.endCompound(); } + } + + for (var ext in extensions) + if (extensions.propertyIsEnumerable(ext) && + !instance.propertyIsEnumerable(ext)) + instance[ext] = extensions[ext]; + return instance; + } // (end of function CodeMirror) + + // The default configuration options. + CodeMirror.defaults = { + value: "", + mode: null, + theme: "default", + indentUnit: 2, + indentWithTabs: false, + smartIndent: true, + tabSize: 4, + keyMap: "default", + extraKeys: null, + electricChars: true, + autoClearEmptyLines: false, + onKeyEvent: null, + onDragEvent: null, + lineWrapping: false, + lineNumbers: false, + gutter: false, + fixedGutter: false, + firstLineNumber: 1, + readOnly: false, + dragDrop: true, + onChange: null, + onCursorActivity: null, + onViewportChange: null, + onGutterClick: null, + onHighlightComplete: null, + onUpdate: null, + onFocus: null, onBlur: null, onScroll: null, + matchBrackets: false, + cursorBlinkRate: 530, + workTime: 100, + workDelay: 200, + pollInterval: 100, + undoDepth: 40, + tabindex: null, + autofocus: null, + lineNumberFormatter: function(integer) { return integer; } + }; + + var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); + var mac = ios || /Mac/.test(navigator.platform); + var win = /Win/.test(navigator.platform); + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) + spec = mimeModes[spec]; + else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) + return CodeMirror.resolveMode("application/xml"); + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + return mfactory(options, spec); + }; + CodeMirror.listModes = function() { + var list = []; + for (var m in modes) + if (modes.propertyIsEnumerable(m)) list.push(m); + return list; + }; + CodeMirror.listMIMEs = function() { + var list = []; + for (var m in mimeModes) + if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]}); + return list; + }; + + var extensions = CodeMirror.extensions = {}; + CodeMirror.defineExtension = function(name, func) { + extensions[name] = func; + }; + + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});}, + killLine: function(cm) { + var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to); + if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange("", from, {line: from.line + 1, ch: 0}); + else cm.replaceRange("", from, sel ? to : {line: from.line}); + }, + deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange("", {line: l, ch: 0}, {line: l});}, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + goDocStart: function(cm) {cm.setCursor(0, 0, true);}, + goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);}, + goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);}, + goLineStartSmart: function(cm) { + var cur = cm.getCursor(); + var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\S/)); + cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true); + }, + goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);}, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharLeft: function(cm) {cm.deleteH(-1, "char");}, + delCharRight: function(cm) {cm.deleteH(1, "char");}, + delWordLeft: function(cm) {cm.deleteH(-1, "word");}, + delWordRight: function(cm) {cm.deleteH(1, "word");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t", "end");}, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.replaceSelection("\t", "end"); + }, + transposeChars: function(cm) { + var cur = cm.getCursor(), line = cm.getLine(cur.line); + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1}); + }, + newlineAndIndent: function(cm) { + cm.replaceSelection("\n", "end"); + cm.indentLine(cm.getCursor().line); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharRight", "Backspace": "delCharLeft", "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite" + }; + // Note that the save and find-related commands aren't defined by + // default. Unknown commands are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goWordLeft", "Ctrl-Right": "goWordRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delWordLeft", "Ctrl-Delete": "delWordRight", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goWordLeft", + "Alt-Right": "goWordRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delWordLeft", + "Ctrl-Alt-Backspace": "delWordRight", "Alt-Delete": "delWordRight", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageUp", "Shift-Ctrl-V": "goPageDown", "Ctrl-D": "delCharRight", "Ctrl-H": "delCharLeft", + "Alt-D": "delWordRight", "Alt-Backspace": "delWordLeft", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + function lookupKey(name, extraMap, map, handle, stop) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) { + if (stop) stop(); + return true; + } + if (found != null && handle(found)) return true; + if (map.nofallthrough) { + if (stop) stop(); + return true; + } + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0, e = fallthrough.length; i < e; ++i) { + if (lookup(fallthrough[i])) return true; + } + return false; + } + if (extraMap && lookup(extraMap)) return true; + return lookup(map); + } + function isModifierKey(event) { + var name = keyNames[e_prop(event, "keyCode")]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = document.body; + // doc.activeElement occasionally throws on IE + try { hasFocus = document.activeElement; } catch(e) {} + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = instance.getValue();} + if (textarea.form) { + // Deplorable hack to make the submit method do the right thing. + var rmSubmit = connect(textarea.form, "submit", save, true); + if (typeof textarea.form.submit == "function") { + var realSubmit = textarea.form.submit; + textarea.form.submit = function wrappedSubmit() { + save(); + textarea.form.submit = realSubmit; + textarea.form.submit(); + textarea.form.submit = wrappedSubmit; + }; + } + } + + textarea.style.display = "none"; + var instance = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + instance.save = save; + instance.getTextArea = function() { return textarea; }; + instance.toTextArea = function() { + save(); + textarea.parentNode.removeChild(instance.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + rmSubmit(); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return instance; + }; + + var gecko = /gecko\/\d{7}/i.test(navigator.userAgent); + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt8 = /MSIE [1-7]\b/.test(navigator.userAgent); + var ie_lt9 = /MSIE [1-8]\b/.test(navigator.userAgent); + var quirksMode = ie && document.documentMode == 5; + var webkit = /WebKit\//.test(navigator.userAgent); + var chrome = /Chrome\//.test(navigator.userAgent); + var opera = /Opera\//.test(navigator.userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var khtml = /KHTML\//.test(navigator.userAgent); + var mac_geLion = /Mac OS X 10\D([7-9]|\d\d)\D/.test(navigator.userAgent); + + // Utility functions for working with state. Exported because modes + // sometimes need to do this. + function copyState(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + } + CodeMirror.copyState = copyState; + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + CodeMirror.startState = startState; + + // The character stream used by a mode's parser. + function StringStream(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + } + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() {return countColumn(this.string, this.start, this.tabSize);}, + indentation: function() {return countColumn(this.string, null, this.tabSize);}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);} + }; + CodeMirror.StringStream = StringStream; + + function MarkedText(from, to, className, marker) { + this.from = from; this.to = to; this.style = className; this.marker = marker; + } + MarkedText.prototype = { + attach: function(line) { this.marker.set.push(line); }, + detach: function(line) { + var ix = indexOf(this.marker.set, line); + if (ix > -1) this.marker.set.splice(ix, 1); + }, + split: function(pos, lenBefore) { + if (this.to <= pos && this.to != null) return null; + var from = this.from < pos || this.from == null ? null : this.from - pos + lenBefore; + var to = this.to == null ? null : this.to - pos + lenBefore; + return new MarkedText(from, to, this.style, this.marker); + }, + dup: function() { return new MarkedText(null, null, this.style, this.marker); }, + clipTo: function(fromOpen, from, toOpen, to, diff) { + if (fromOpen && to > this.from && (to < this.to || this.to == null)) + this.from = null; + else if (this.from != null && this.from >= from) + this.from = Math.max(to, this.from) + diff; + if (toOpen && (from < this.to || this.to == null) && (from > this.from || this.from == null)) + this.to = null; + else if (this.to != null && this.to > from) + this.to = to < this.to ? this.to + diff : from; + }, + isDead: function() { return this.from != null && this.to != null && this.from >= this.to; }, + sameSet: function(x) { return this.marker == x.marker; } + }; + + function Bookmark(pos) { + this.from = pos; this.to = pos; this.line = null; + } + Bookmark.prototype = { + attach: function(line) { this.line = line; }, + detach: function(line) { if (this.line == line) this.line = null; }, + split: function(pos, lenBefore) { + if (pos < this.from) { + this.from = this.to = (this.from - pos) + lenBefore; + return this; + } + }, + isDead: function() { return this.from > this.to; }, + clipTo: function(fromOpen, from, toOpen, to, diff) { + if ((fromOpen || from < this.from) && (toOpen || to > this.to)) { + this.from = 0; this.to = -1; + } else if (this.from > from) { + this.from = this.to = Math.max(to, this.from) + diff; + } + }, + sameSet: function(x) { return false; }, + find: function() { + if (!this.line || !this.line.parent) return null; + return {line: lineNo(this.line), ch: this.from}; + }, + clear: function() { + if (this.line) { + var found = indexOf(this.line.marked, this); + if (found != -1) this.line.marked.splice(found, 1); + this.line = null; + } + } + }; + + // When measuring the position of the end of a line, different + // browsers require different approaches. If an empty span is added, + // many browsers report bogus offsets. Of those, some (Webkit, + // recent IE) will accept a space without moving the whole span to + // the next line when wrapping it, others work with a zero-width + // space. + var eolSpanContent = " "; + if (gecko || (ie && !ie_lt8)) eolSpanContent = "\u200b"; + else if (opera) eolSpanContent = ""; + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + function Line(text, styles) { + this.styles = styles || [text, null]; + this.text = text; + this.height = 1; + } + Line.inheritMarks = function(text, orig) { + var ln = new Line(text), mk = orig && orig.marked; + if (mk) { + for (var i = 0; i < mk.length; ++i) { + if (mk[i].to == null && mk[i].style) { + var newmk = ln.marked || (ln.marked = []), mark = mk[i]; + var nmark = mark.dup(); newmk.push(nmark); nmark.attach(ln); + } + } + } + return ln; + }; + Line.prototype = { + // Replace a piece of a line, keeping the styles around it intact. + replace: function(from, to_, text) { + var st = [], mk = this.marked, to = to_ == null ? this.text.length : to_; + copyStyles(0, from, this.styles, st); + if (text) st.push(text, null); + copyStyles(to, this.text.length, this.styles, st); + this.styles = st; + this.text = this.text.slice(0, from) + text + this.text.slice(to); + this.stateAfter = null; + if (mk) { + var diff = text.length - (to - from); + for (var i = 0; i < mk.length; ++i) { + var mark = mk[i]; + mark.clipTo(from == null, from || 0, to_ == null, to, diff); + if (mark.isDead()) {mark.detach(this); mk.splice(i--, 1);} + } + } + }, + // Split a part off a line, keeping styles and markers intact. + split: function(pos, textBefore) { + var st = [textBefore, null], mk = this.marked; + copyStyles(pos, this.text.length, this.styles, st); + var taken = new Line(textBefore + this.text.slice(pos), st); + if (mk) { + for (var i = 0; i < mk.length; ++i) { + var mark = mk[i]; + var newmark = mark.split(pos, textBefore.length); + if (newmark) { + if (!taken.marked) taken.marked = []; + taken.marked.push(newmark); newmark.attach(taken); + if (newmark == mark) mk.splice(i--, 1); + } + } + } + return taken; + }, + append: function(line) { + var mylen = this.text.length, mk = line.marked, mymk = this.marked; + this.text += line.text; + copyStyles(0, line.text.length, line.styles, this.styles); + if (mymk) { + for (var i = 0; i < mymk.length; ++i) + if (mymk[i].to == null) mymk[i].to = mylen; + } + if (mk && mk.length) { + if (!mymk) this.marked = mymk = []; + outer: for (var i = 0; i < mk.length; ++i) { + var mark = mk[i]; + if (!mark.from) { + for (var j = 0; j < mymk.length; ++j) { + var mymark = mymk[j]; + if (mymark.to == mylen && mymark.sameSet(mark)) { + mymark.to = mark.to == null ? null : mark.to + mylen; + if (mymark.isDead()) { + mymark.detach(this); + mk.splice(i--, 1); + } + continue outer; + } + } + } + mymk.push(mark); + mark.attach(this); + mark.from += mylen; + if (mark.to != null) mark.to += mylen; + } + } + }, + fixMarkEnds: function(other) { + var mk = this.marked, omk = other.marked; + if (!mk) return; + outer: for (var i = 0; i < mk.length; ++i) { + var mark = mk[i], close = mark.to == null; + if (close && omk) { + for (var j = 0; j < omk.length; ++j) { + var om = omk[j]; + if (!om.sameSet(mark) || om.from != null) continue; + if (mark.from == this.text.length && om.to == 0) { + omk.splice(j, 1); + mk.splice(i--, 1); + continue outer; + } else { + close = false; break; + } + } + } + if (close) mark.to = this.text.length; + } + }, + fixMarkStarts: function() { + var mk = this.marked; + if (!mk) return; + for (var i = 0; i < mk.length; ++i) + if (mk[i].from == null) mk[i].from = 0; + }, + addMark: function(mark) { + mark.attach(this); + if (this.marked == null) this.marked = []; + this.marked.push(mark); + this.marked.sort(function(a, b){return (a.from || 0) - (b.from || 0);}); + }, + // Run the given mode's parser over a line, update the styles + // array, which contains alternating fragments of text and CSS + // classes. + highlight: function(mode, state, tabSize) { + var stream = new StringStream(this.text, tabSize), st = this.styles, pos = 0; + var changed = false, curWord = st[0], prevWord; + if (this.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state); + var substr = this.text.slice(stream.start, stream.pos); + stream.start = stream.pos; + if (pos && st[pos-1] == style) + st[pos-2] += substr; + else if (substr) { + if (!changed && (st[pos+1] != style || (pos && st[pos-2] != prevWord))) changed = true; + st[pos++] = substr; st[pos++] = style; + prevWord = curWord; curWord = st[pos]; + } + // Give up when line is ridiculously long + if (stream.pos > 5000) { + st[pos++] = this.text.slice(stream.pos); st[pos++] = null; + break; + } + } + if (st.length != pos) {st.length = pos; changed = true;} + if (pos && st[pos-2] != prevWord) changed = true; + // Short lines with simple highlights return null, and are + // counted as changed by the driver because they are likely to + // highlight the same way in various contexts. + return changed || (st.length < 5 && this.text.length < 10 ? null : false); + }, + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(mode, state, tabSize, ch) { + var txt = this.text, stream = new StringStream(txt, tabSize); + while (stream.pos < ch && !stream.eol()) { + stream.start = stream.pos; + var style = mode.token(stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + className: style || null, + state: state}; + }, + indentation: function(tabSize) {return countColumn(this.text, null, tabSize);}, + // Produces an HTML fragment for the line, taking selection, + // marking, and highlighting into account. + getElement: function(makeTab, wrapAt, wrapWBR) { + var first = true, col = 0, specials = /[\t\u0000-\u0019\u200b\u2028\u2029\uFEFF]/g; + var pre = elt("pre"); + function span_(html, text, style) { + if (!text) return; + // Work around a bug where, in some compat modes, IE ignores leading spaces + if (first && ie && text.charAt(0) == " ") text = "\u00a0" + text.slice(1); + first = false; + if (!specials.test(text)) { + col += text.length; + var content = document.createTextNode(text); + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + specials.lastIndex = pos; + var m = specials.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + content.appendChild(document.createTextNode(text.slice(pos, pos + skipped))); + col += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tab = makeTab(col); + content.appendChild(tab.element.cloneNode(true)); + col += tab.width; + } else { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + m[0].charCodeAt(0).toString(16); + content.appendChild(token); + col += 1; + } + } + } + if (style) html.appendChild(elt("span", [content], style)); + else html.appendChild(content); + } + var span = span_; + if (wrapAt != null) { + var outPos = 0, anchor = pre.anchor = elt("span"); + span = function(html, text, style) { + var l = text.length; + if (wrapAt >= outPos && wrapAt < outPos + l) { + if (wrapAt > outPos) { + span_(html, text.slice(0, wrapAt - outPos), style); + // See comment at the definition of spanAffectsWrapping + if (wrapWBR) html.appendChild(elt("wbr")); + } + html.appendChild(anchor); + var cut = wrapAt - outPos; + span_(anchor, opera ? text.slice(cut, cut + 1) : text.slice(cut), style); + if (opera) span_(html, text.slice(cut + 1), style); + wrapAt--; + outPos += l; + } else { + outPos += l; + span_(html, text, style); + if (outPos == wrapAt && outPos == len) { + setTextContent(anchor, eolSpanContent); + html.appendChild(anchor); + } + // Stop outputting HTML when gone sufficiently far beyond measure + else if (outPos > wrapAt + 10 && /\s/.test(text)) span = function(){}; + } + }; + } + + var st = this.styles, allText = this.text, marked = this.marked; + var len = allText.length; + function styleToClass(style) { + if (!style) return null; + return "cm-" + style.replace(/ +/g, " cm-"); + } + if (!allText && wrapAt == null) { + span(pre, " "); + } else if (!marked || !marked.length) { + for (var i = 0, ch = 0; ch < len; i+=2) { + var str = st[i], style = st[i+1], l = str.length; + if (ch + l > len) str = str.slice(0, len - ch); + ch += l; + span(pre, str, styleToClass(style)); + } + } else { + var pos = 0, i = 0, text = "", style, sg = 0; + var nextChange = marked[0].from || 0, marks = [], markpos = 0; + var advanceMarks = function() { + var m; + while (markpos < marked.length && + ((m = marked[markpos]).from == pos || m.from == null)) { + if (m.style != null) marks.push(m); + ++markpos; + } + nextChange = markpos < marked.length ? marked[markpos].from : Infinity; + for (var i = 0; i < marks.length; ++i) { + var to = marks[i].to; + if (to == null) to = Infinity; + if (to == pos) marks.splice(i--, 1); + else nextChange = Math.min(to, nextChange); + } + }; + var m = 0; + while (pos < len) { + if (nextChange == pos) advanceMarks(); + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + var appliedStyle = style; + for (var j = 0; j < marks.length; ++j) + appliedStyle = (appliedStyle ? appliedStyle + " " : "") + marks[j].style; + span(pre, end > upto ? text.slice(0, upto - pos) : text, appliedStyle); + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + } + text = st[i++]; style = styleToClass(st[i++]); + } + } + } + return pre; + }, + cleanUp: function() { + this.parent = null; + if (this.marked) + for (var i = 0, e = this.marked.length; i < e; ++i) this.marked[i].detach(this); + } + }; + // Utility used by replace and split above + function copyStyles(from, to, source, dest) { + for (var i = 0, pos = 0, state = 0; pos < to; i+=2) { + var part = source[i], end = pos + part.length; + if (state == 0) { + if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]); + if (end >= from) state = 1; + } else if (state == 1) { + if (end > to) dest.push(part.slice(0, to - pos), source[i+1]); + else dest.push(part, source[i+1]); + } + pos = end; + } + } + + // Data structure that holds the sequence of lines. + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, e = lines.length, height = 0; i < e; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + remove: function(at, n, callbacks) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + line.cleanUp(); + if (line.handlers) + for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]); + } + this.lines.splice(at, n); + }, + collapse: function(lines) { + lines.splice.apply(lines, [lines.length, 0].concat(this.lines)); + }, + insertHeight: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this; + }, + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0, e = children.length; i < e; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + remove: function(at, n, callbacks) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.remove(at, rm, callbacks); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + if (this.size - n < 25) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines); + }, + insert: function(at, lines) { + var height = 0; + for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height; + this.insertHeight(at, lines, height); + }, + insertHeight: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertHeight(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iter: function(from, to, op) { this.iterN(from, to - from, op); }, + iterN: function(at, n, op) { + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + function getLineAt(chunk, n) { + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0, e = chunk.children.length; ; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no; + } + function lineAtHeight(chunk, h) { + var n = 0; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0, e = chunk.lines.length; i < e; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + function heightAtLine(chunk, n) { + var h = 0; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; continue outer; } + n -= sz; + h += child.height; + } + return h; + } while (!chunk.lines); + for (var i = 0; i < n; ++i) h += chunk.lines[i].height; + return h; + } + + // The history object 'chunks' changes that are made close together + // and at almost the same time into bigger undoable units. + function History() { + this.time = 0; + this.done = []; this.undone = []; + this.compound = 0; + this.closed = false; + } + History.prototype = { + addChange: function(start, added, old) { + this.undone.length = 0; + var time = +new Date, cur = this.done[this.done.length - 1], last = cur && cur[cur.length - 1]; + var dtime = time - this.time; + + if (this.compound && cur && !this.closed) { + cur.push({start: start, added: added, old: old}); + } else if (dtime > 400 || !last || this.closed || + last.start > start + old.length || last.start + last.added < start) { + this.done.push([{start: start, added: added, old: old}]); + this.closed = false; + } else { + var startBefore = Math.max(0, last.start - start), + endAfter = Math.max(0, (start + old.length) - (last.start + last.added)); + for (var i = startBefore; i > 0; --i) last.old.unshift(old[i - 1]); + for (var i = endAfter; i > 0; --i) last.old.push(old[old.length - i]); + if (startBefore) last.start = start; + last.added += added - (old.length - startBefore - endAfter); + } + this.time = time; + }, + startCompound: function() { + if (!this.compound++) this.closed = true; + }, + endCompound: function() { + if (!--this.compound) this.closed = true; + } + }; + + function stopMethod() {e_stop(this);} + // Ensure an event has a stop method. + function addStop(event) { + if (!event.stop) event.stop = stopMethod; + return event; + } + + function e_preventDefault(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + function e_stopPropagation(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + CodeMirror.e_stop = e_stop; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // Allow 3rd-party code to override event properties by adding an override + // object to an event object. + function e_prop(e, prop) { + var overridden = e.override && e.override.hasOwnProperty(prop); + return overridden ? e.override[prop] : e[prop]; + } + + // Event handler registration. If disconnect is true, it'll return a + // function that unregisters the handler. + function connect(node, type, handler, disconnect) { + if (typeof node.addEventListener == "function") { + node.addEventListener(type, handler, false); + if (disconnect) return function() {node.removeEventListener(type, handler, false);}; + } else { + var wrapHandler = function(event) {handler(event || window.event);}; + node.attachEvent("on" + type, wrapHandler); + if (disconnect) return function() {node.detachEvent("on" + type, wrapHandler);}; + } + } + CodeMirror.connect = connect; + + function Delayed() {this.id = null;} + Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}}; + + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_lt9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + // Feature-detect whether newlines in textareas are converted to \r\n + var lineSep = function () { + var te = elt("textarea"); + te.value = "foo\nbar"; + if (te.value.indexOf("\r") > -1) return "\r\n"; + return "\n"; + }(); + + // For a reason I have yet to figure out, some browsers disallow + // word wrapping between certain characters *only* if a new inline + // element is started between them. This makes it hard to reliably + // measure the position of things, since that requires inserting an + // extra span. This terribly fragile set of regexps matches the + // character combinations that suffer from this phenomenon on the + // various browsers. + var spanAffectsWrapping = /^$/; // Won't match any two-character string + if (gecko) spanAffectsWrapping = /$'/; + else if (safari) spanAffectsWrapping = /\-[^ \-?]|\?[^ !'\"\),.\-\/:;\?\]\}]/; + else if (chrome) spanAffectsWrapping = /\-[^ \-\.?]|\?[^ \-\.?\]\}:;!'\"\),\/]|[\.!\"#&%\)*+,:;=>\]|\}~][\(\{\[<]|\$'/; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = 0, n = 0; i < end; ++i) { + if (string.charAt(i) == "\t") n += tabSize - (n % tabSize); + else ++n; + } + return n; + } + + function eltOffset(node, screen) { + // Take the parts of bounding client rect that we are interested in so we are able to edit if need be, + // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page) + try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; } + catch(e) { box = {top: 0, left: 0}; } + if (!screen) { + // Get the toplevel scroll, working around browser differences. + if (window.pageYOffset == null) { + var t = document.documentElement || document.body.parentNode; + if (t.scrollTop == null) t = document.body; + box.top += t.scrollTop; box.left += t.scrollLeft; + } else { + box.top += window.pageYOffset; box.left += window.pageXOffset; + } + } + return box; + } + + // Get a node's text content. + function eltText(node) { + return node.textContent || node.innerText || node.nodeValue || ""; + } + function selectInput(node) { + if (ios) { // Mobile Safari apparently has a bug where select() is broken. + node.selectionStart = 0; + node.selectionEnd = node.value.length; + } else node.select(); + } + + // Operations on {line, ch} objects. + function posEq(a, b) {return a.line == b.line && a.ch == b.ch;} + function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);} + function copyPos(x) {return {line: x.line, ch: x.ch};} + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") setTextContent(e, content); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + function removeChildren(e) { + e.innerHTML = ""; + return e; + } + function removeChildrenAndAdd(parent, e) { + removeChildren(parent).appendChild(e); + } + function setTextContent(e, str) { + if (ie_lt9) { + e.innerHTML = ""; + e.appendChild(document.createTextNode(str)); + } else e.textContent = str; + } + CodeMirror.setTextContent = setTextContent; + + // Used to position the cursor after an undo/redo by finding the + // last edited character. + function editEnd(from, to) { + if (!to) return 0; + if (!from) return to.length; + for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j) + if (from.charAt(i) != to.charAt(j)) break; + return j + 1; + } + + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + function isWordChar(ch) { + return /\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase(); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + CodeMirror.splitLines = splitLines; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete", + 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home", + 63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + return CodeMirror; +})(); diff --git a/book/common/ext/codelens/v3/js/codemirror/python.js b/book/common/ext/codelens/v3/js/codemirror/python.js new file mode 100644 index 0000000..fc5b955 --- /dev/null +++ b/book/common/ext/codelens/v3/js/codemirror/python.js @@ -0,0 +1,338 @@ +CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"); + var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + + var wordOperators = wordRegexp(['and', 'or', 'not', 'is', 'in']); + var commonkeywords = ['as', 'assert', 'break', 'class', 'continue', + 'def', 'del', 'elif', 'else', 'except', 'finally', + 'for', 'from', 'global', 'if', 'import', + 'lambda', 'pass', 'raise', 'return', + 'try', 'while', 'with', 'yield']; + var commonBuiltins = ['abs', 'all', 'any', 'bin', 'bool', 'bytearray', 'callable', 'chr', + 'classmethod', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', + 'enumerate', 'eval', 'filter', 'float', 'format', 'frozenset', + 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', + 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', + 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', + 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', + 'type', 'vars', 'zip', '__import__', 'NotImplemented', + 'Ellipsis', '__debug__']; + var py2 = {'builtins': ['apply', 'basestring', 'buffer', 'cmp', 'coerce', 'execfile', + 'file', 'intern', 'long', 'raw_input', 'reduce', 'reload', + 'unichr', 'unicode', 'xrange', 'False', 'True', 'None'], + 'keywords': ['exec', 'print']}; + var py3 = {'builtins': ['ascii', 'bytes', 'exec', 'print'], + 'keywords': ['nonlocal', 'False', 'True', 'None']}; + + if (!!parserConf.version && parseInt(parserConf.version, 10) === 3) { + commonkeywords = commonkeywords.concat(py3.keywords); + commonBuiltins = commonBuiltins.concat(py3.builtins); + var stringPrefixes = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i"); + } else { + commonkeywords = commonkeywords.concat(py2.keywords); + commonBuiltins = commonBuiltins.concat(py2.builtins); + var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(commonkeywords); + var builtins = wordRegexp(commonBuiltins); + + var indentInfo = null; + + // tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + var scopeOffset = state.scopes[0].offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) { + indentInfo = 'indent'; + } else if (lineOffset < scopeOffset) { + indentInfo = 'dedent'; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f]+/i)) { intLiteral = true; } + // Binary + if (stream.match(/^0b[01]+/i)) { intLiteral = true; } + // Octal + if (stream.match(/^0o[0-7]+/i)) { intLiteral = true; } + // Decimal + if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(builtins)) { + return 'builtin'; + } + + if (stream.match(identifiers)) { + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { + delimiter = delimiter.substr(1); + } + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + return function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat('\\')) { + stream.next(); + if (singleline && stream.eol()) { + return OUTCLASS; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + }; + } + + function indent(stream, state, type) { + type = type || 'py'; + var indentUnit = 0; + if (type === 'py') { + if (state.scopes[0].type !== 'py') { + state.scopes[0].offset = stream.indentation(); + return; + } + for (var i = 0; i < state.scopes.length; ++i) { + if (state.scopes[i].type === 'py') { + indentUnit = state.scopes[i].offset + conf.indentUnit; + break; + } + } + } else { + indentUnit = stream.column() + stream.current().length; + } + state.scopes.unshift({ + offset: indentUnit, + type: type + }); + } + + function dedent(stream, state, type) { + type = type || 'py'; + if (state.scopes.length == 1) return; + if (state.scopes[0].type === 'py') { + var _indent = stream.indentation(); + var _indent_index = -1; + for (var i = 0; i < state.scopes.length; ++i) { + if (_indent === state.scopes[i].offset) { + _indent_index = i; + break; + } + } + if (_indent_index === -1) { + return true; + } + while (state.scopes[0].offset !== _indent) { + state.scopes.shift(); + } + return false; + } else { + if (type === 'py') { + state.scopes[0].offset = stream.indentation(); + return false; + } else { + if (state.scopes[0].type != type) { + return true; + } + state.scopes.shift(); + return false; + } + } + } + + function tokenLexer(stream, state) { + indentInfo = null; + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = stream.match(identifiers, false) ? null : ERRORCLASS; + if (style === null && state.lastToken === 'meta') { + // Apply 'meta' style to '.' connected identifiers when + // appropriate. + style = 'meta'; + } + return style; + } + + // Handle decorators + if (current === '@') { + return stream.match(identifiers, false) ? 'meta' : ERRORCLASS; + } + + if ((style === 'variable' || style === 'builtin') + && state.lastToken === 'meta') { + style = 'meta'; + } + + // Handle scope changes. + if (current === 'pass' || current === 'return') { + state.dedent += 1; + } + if (current === 'lambda') state.lambda = true; + if ((current === ':' && !state.lambda && state.scopes[0].type == 'py') + || indentInfo === 'indent') { + indent(stream, state); + } + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1)); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state, current)) { + return ERRORCLASS; + } + } + if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'py') { + if (state.scopes.length > 1) state.scopes.shift(); + state.dedent -= 1; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset:basecolumn || 0, type:'py'}], + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastToken = style; + + if (stream.eol() && stream.lambda) { + state.lambda = false; + } + + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase) { + return 0; + } + + return state.scopes[0].offset; + } + + }; + return external; +}); + +CodeMirror.defineMIME("text/x-python", "python"); diff --git a/book/common/ext/codelens/v3/js/d3.v2.min.js b/book/common/ext/codelens/v3/js/d3.v2.min.js new file mode 100644 index 0000000..2a1e131 --- /dev/null +++ b/book/common/ext/codelens/v3/js/d3.v2.min.js @@ -0,0 +1,4 @@ +(function(){function d(a,b){try{for(var c in b)Object.defineProperty(a.prototype,c,{value:b[c],enumerable:!1})}catch(d){a.prototype=b}}function f(a){var b=-1,c=a.length,d=[];while(++b=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function H(a,b){var c=Math.pow(10,Math.abs(8-b)*3);return{scale:b>8?function(a){return a/c}:function(a){return a*c},symbol:a}}function N(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function O(a){return function(b){return 1-a(1-b)}}function P(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function Q(a){return a}function R(a){return function(b){return Math.pow(b,a)}}function S(a){return 1-Math.cos(a*Math.PI/2)}function T(a){return Math.pow(2,10*(a-1))}function U(a){return 1-Math.sqrt(1-a*a)}function V(a,b){var c;return arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a),function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function W(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-a)}}function X(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function Y(){d3.event.stopPropagation(),d3.event.preventDefault()}function Z(){var a=d3.event,b;while(b=a.sourceEvent)a=b;return a}function $(a){var b=new z,c=0,d=arguments.length;while(++c360?a-=360:a<0&&(a+=360),a<60?d+(e-d)*a/60:a<180?e:a<240?d+(e-d)*(240-a)/60:d}function g(a){return Math.round(f(a)*255)}var d,e;return a%=360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e,bd(g(a+120),g(a),g(a-120))}function bn(a){return i(a,bt),a}function bu(a){return function(){return bo(a,this)}}function bv(a){return function(){return bp(a,this)}}function bw(a,b){function f(){if(b=this.classList)return b.add(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;c.lastIndex=0,c.test(e)||(e=v(e+" "+a),d?b.baseVal=e:this.className=e)}function g(){if(b=this.classList)return b.remove(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;e=v(e.replace(c," ")),d?b.baseVal=e:this.className=e}function h(){(b.apply(this,arguments)?f:g).call(this)}var c=new RegExp("(^|\\s+)"+d3.requote(a)+"(\\s+|$)","g");if(arguments.length<2){var d=this.node();if(e=d.classList)return e.contains(a);var e=d.className;return c.lastIndex=0,c.test(e.baseVal!=null?e.baseVal:e)}return this.each(typeof b=="function"?h:b?f:g)}function bx(a){return{__data__:a}}function by(a){return function(){return bs(this,a)}}function bz(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bA(a,b){for(var c=0,d=a.length;cb?q():(m.active=b,d.forEach(function(b,c){(c=c.call(a,n,h))&&j.push(c)}),e.start.call(a,n,h),p(f)||d3.timer(p,0,c),1)}function p(c){if(m.active!==b)return q();var d=(c-k)/l,g=f(d),i=j.length;while(i>0)j[--i].call(a,g);if(d>=1)return q(),bK=b,e.end.call(a,n,h),bK=0,1}function q(){return--m.count||delete a.__transition__,1}var j=[],k=a.delay,l=a.duration,m=(a=a.node).__transition__||(a.__transition__={active:0,count:0}),n=a.__data__;++m.count,k<=g?o(g):d3.timer(o,k,c)})},0,c),a}function bG(a,b,c){return c!=""&&bF}function bH(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bF:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=ba(a);return typeof b=="function"?d:b==null?bG:(b+="",e)}function bR(a){var b=bK,c=bQ,d=bO,e=bP;return bK=this.id,bQ=this.ease(),bA(this,function(b,c,d){bO=b.delay,bP=b.duration,a.call(b=b.node,b.__data__,c,d)}),bK=b,bQ=c,bO=d,bP=e,this}function bV(){var a,b=Date.now(),c=bS;while(c)a=b-c.then,a>=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bW()-b;d>24?(isFinite(d)&&(clearTimeout(bU),bU=setTimeout(bV,d)),bT=0):(bT=1,bX(bV))}function bW(){var a=null,b=bS,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bS=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bY(a){var b=[a.a,a.b],c=[a.c,a.d],d=b$(b),e=bZ(b,c),f=b$(b_(c,b,-e))||0;b[0]*c[1]2?cp:co,i=d?bc:bb;return e=g(a,b,i,c),f=g(b,a,i,d3.interpolate),h}function h(a){return e(a)}var e,f;return h.invert=function(a){return f(a)},h.domain=function(b){return arguments.length?(a=b.map(Number),g()):a},h.range=function(a){return arguments.length?(b=a,g()):b},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){return arguments.length?(d=a,g()):d},h.interpolate=function(a){return arguments.length?(c=a,g()):c},h.ticks=function(b){return cm(a,b)},h.tickFormat=function(b){return cn(a,b)},h.nice=function(){return cg(a,ck),g()},h.copy=function(){return ci(a,b,c,d)},g()}function cj(a,b){return d3.rebind(a,b,"range","rangeRound","interpolate","clamp")}function ck(a){return a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1),{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function cl(a,b){var c=ce(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;return f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e,c}function cm(a,b){return d3.range.apply(d3,cl(a,b))}function cn(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(cl(a,b)[2])/Math.LN10+.01))+"f")}function co(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function cp(a,b,c,d){var e=[],f=[],g=0,h=Math.min(a.length,b.length)-1;a[h]0;j--)e.push(c(f)*j)}else{for(;fi;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=cr);if(arguments.length<1)return e;var f=Math.max(.1,a/d.ticks().length),g=b===ct?(h=-1e-12,Math.floor):(h=1e-12,Math.ceil),h;return function(a){return a/c(g(b(a)+h))<=f?e(a):""}},d.copy=function(){return cq(a.copy(),b)},cj(d,a)}function cs(a){return Math.log(a<0?0:a)/Math.LN10}function ct(a){return-Math.log(a>0?0:-a)/Math.LN10}function cu(a,b){function e(b){return a(c(b))}var c=cv(b),d=cv(1/b);return e.invert=function(b){return d(a.invert(b))},e.domain=function(b){return arguments.length?(a.domain(b.map(c)),e):a.domain().map(d)},e.ticks=function(a){return cm(e.domain(),a)},e.tickFormat=function(a){return cn(e.domain(),a)},e.nice=function(){return e.domain(cg(e.domain(),ck))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=cv(b=a),d=cv(1/b),e.domain(f)},e.copy=function(){return cu(a.copy(),b)},cj(e,a)}function cv(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function cw(a,b){function f(b){return d[((c.get(b)||c.set(b,a.push(b)))-1)%d.length]}function g(b,c){return d3.range(a.length).map(function(a){return b+c*a})}var c,d,e;return f.domain=function(d){if(!arguments.length)return a;a=[],c=new j;var e=-1,g=d.length,h;while(++e1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function dh(a){return a.length<3?cP(a):a[0]+cV(a,dg(a))}function di(a){var b,c=-1,d=a.length,e,f;while(++c1){var d=ce(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++id&&(c=b,d=e);return c}function d_(a){return a.reduce(ea,0)}function ea(a,b){return a+b[1]}function eb(a,b){return ec(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function ec(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function ed(a){return[d3.min(a),d3.max(a)]}function ee(a,b){return d3.rebind(a,b,"sort","children","value"),a.links=ei,a.nodes=function(b){return ej=!0,(a.nodes=a)(b)},a}function ef(a){return a.children}function eg(a){return a.value}function eh(a,b){return b.value-a.value}function ei(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function ek(a,b){return a.value-b.value}function el(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function em(a,b){a._pack_next=b,b._pack_prev=a}function en(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function eo(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(ep),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],et(g,h,i),l(i),el(g,i),g._pack_prev=i,el(i,h),h=g._pack_next;for(var m=3;m0&&(a=d)}return a}function eC(a,b){return a.x-b.x}function eD(a,b){return b.x-a.x}function eE(a,b){return a.depth-b.depth}function eF(a,b){function c(a,d){var e=a.children;if(e&&(i=e.length)){var f,g=null,h=-1,i;while(++h=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function eH(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function eI(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function eJ(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function eK(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];return e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0),{x:c,y:d,dx:e,dy:f}}function eL(a){return a.map(eM).join(",")}function eM(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}function eO(a,b){return function(c){return c&&a.hasOwnProperty(c.type)?a[c.type](c):b}}function eP(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}function eQ(a,b){eR.hasOwnProperty(a.type)&&eR[a.type](a,b)}function eS(a,b){eQ(a.geometry,b)}function eT(a,b){for(var c=a.features,d=0,e=c.length;d0}function fg(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function fh(a,b,c,d){var e=a[0],f=b[0],g=c[0],h=d[0],i=a[1],j=b[1],k=c[1],l=d[1],m=e-g,n=f-e,o=h-g,p=i-k,q=j-i,r=l-k,s=(o*p-r*m)/(r*n-o*q);return[e+s*n,i+s*q]}function fj(a,b){var c={list:a.map(function(a,b){return{index:b,x:a[0],y:a[1]}}).sort(function(a,b){return a.yb.y?1:a.xb.x?1:0}),bottomSite:null},d={list:[],leftEnd:null,rightEnd:null,init:function(){d.leftEnd=d.createHalfEdge(null,"l"),d.rightEnd=d.createHalfEdge(null,"l"),d.leftEnd.r=d.rightEnd,d.rightEnd.l=d.leftEnd,d.list.unshift(d.leftEnd,d.rightEnd)},createHalfEdge:function(a,b){return{edge:a,side:b,vertex:null,l:null,r:null}},insert:function(a,b){b.l=a,b.r=a.r,a.r.l=b,a.r=b},leftBound:function(a){var b=d.leftEnd;do b=b.r;while(b!=d.rightEnd&&e.rightOf(b,a));return b=b.l,b},del:function(a){a.l.r=a.r,a.r.l=a.l,a.edge=null},right:function(a){return a.r},left:function(a){return a.l},leftRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[a.side]},rightRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[fi[a.side]]}},e={bisect:function(a,b){var c={region:{l:a,r:b},ep:{l:null,r:null}},d=b.x-a.x,e=b.y-a.y,f=d>0?d:-d,g=e>0?e:-e;return c.c=a.x*d+a.y*e+(d*d+e*e)*.5,f>g?(c.a=1,c.b=e/d,c.c/=d):(c.b=1,c.a=d/e,c.c/=e),c},intersect:function(a,b){var c=a.edge,d=b.edge;if(!c||!d||c.region.r==d.region.r)return null;var e=c.a*d.b-c.b*d.a;if(Math.abs(e)<1e-10)return null;var f=(c.c*d.b-d.c*c.b)/e,g=(d.c*c.a-c.c*d.a)/e,h=c.region.r,i=d.region.r,j,k;h.y=k.region.r.x;return l&&j.side==="l"||!l&&j.side==="r"?null:{x:f,y:g}},rightOf:function(a,b){var c=a.edge,d=c.region.r,e=b.x>d.x;if(e&&a.side==="l")return 1;if(!e&&a.side==="r")return 0;if(c.a===1){var f=b.y-d.y,g=b.x-d.x,h=0,i=0;!e&&c.b<0||e&&c.b>=0?i=h=f>=c.b*g:(i=b.x+b.y*c.b>c.c,c.b<0&&(i=!i),i||(h=1));if(!h){var j=d.x-c.region.l.x;i=c.b*(g*g-f*f)m*m+n*n}return a.side==="l"?i:!i},endPoint:function(a,c,d){a.ep[c]=d;if(!a.ep[fi[c]])return;b(a)},distance:function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}},f={list:[],insert:function(a,b,c){a.vertex=b,a.ystar=b.y+c;for(var d=0,e=f.list,g=e.length;dh.ystar||a.ystar==h.ystar&&b.x>h.vertex.x)continue;break}e.splice(d,0,a)},del:function(a){for(var b=0,c=f.list,d=c.length;bo.y&&(p=n,n=o,o=p,t="r"),s=e.bisect(n,o),m=d.createHalfEdge(s,t),d.insert(k,m),e.endPoint(s,fi[t],r),q=e.intersect(k,m),q&&(f.del(k),f.insert(k,q,e.distance(q,n))),q=e.intersect(m,l),q&&f.insert(m,q,e.distance(q,n));else break}for(i=d.right(d.leftEnd);i!=d.rightEnd;i=d.right(i))b(i.edge)}function fk(){return{leaf:!0,nodes:[],point:null}}function fl(a,b,c,d,e,f){if(!a(b,c,d,e,f)){var g=(c+e)*.5,h=(d+f)*.5,i=b.nodes;i[0]&&fl(a,i[0],c,d,g,h),i[1]&&fl(a,i[1],g,d,e,h),i[2]&&fl(a,i[2],c,h,g,f),i[3]&&fl(a,i[3],g,h,e,f)}}function fm(a){return{x:a[0],y:a[1]}}function fo(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function fq(a,b,c,d){var e,f,g=0,h=b.length,i=c.length;while(g=i)return-1;e=b.charCodeAt(g++);if(e==37){f=fw[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}function fx(a,b,c){return fz.test(b.substring(c,c+=3))?c:-1}function fy(a,b,c){fA.lastIndex=0;var d=fA.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function fC(a,b,c){var d=fD.get(b.substring(c,c+=3).toLowerCase());return d==null?-1:(a.m=d,c)}function fE(a,b,c){fF.lastIndex=0;var d=fF.exec(b.substring(c,c+12));return d?(a.m=fG.get(d[0].toLowerCase()),c+=d[0].length):-1}function fI(a,b,c){return fq(a,fv.c.toString(),b,c)}function fJ(a,b,c){return fq(a,fv.x.toString(),b,c)}function fK(a,b,c){return fq(a,fv.X.toString(),b,c)}function fL(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+4));return d?(a.y=+d[0],c+=d[0].length):-1}function fM(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.y=fN()+ +d[0],c+=d[0].length):-1}function fN(){return~~((new Date).getFullYear()/1e3)*1e3}function fO(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.m=d[0]-1,c+=d[0].length):-1}function fP(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.d=+d[0],c+=d[0].length):-1}function fQ(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.H=+d[0],c+=d[0].length):-1}function fR(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.M=+d[0],c+=d[0].length):-1}function fS(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.S=+d[0],c+=d[0].length):-1}function fT(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+3));return d?(a.L=+d[0],c+=d[0].length):-1}function fV(a,b,c){var d=fW.get(b.substring(c,c+=2).toLowerCase());return d==null?-1:(a.p=d,c)}function fX(a){var b=a.getTimezoneOffset(),c=b>0?"-":"+",d=~~(Math.abs(b)/60),e=Math.abs(b)%60;return c+fr(d)+fr(e)}function fZ(a){return a.toISOString()}function f$(a,b,c){function d(b){var c=a(b),d=f(c,1);return b-c1)while(gb?1:a>=b?0:NaN},d3.descending=function(a,b){return ba?1:b>=a?0:NaN},d3.mean=function(a,b){var c=a.length,d,e=0,f=-1,g=0;if(arguments.length===1)while(++f1&&(a=a.map(b)),a=a.filter(r),a.length?d3.quantile(a.sort(d3.ascending),.5):undefined},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++cf&&(e=f)}else{while(++cf&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++ce&&(e=f)}else{while(++ce&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++cf&&(e=f),gf&&(e=f),g1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}}},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f>1;a.call(b,b[f],f)>1;c0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,k=b[g++],l,m,n=new j,o,p={};while(++h=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});return f&&e.sort(function(a,b){return f(a.key,b.key)}),e}var a={},b=[],c=[],d,e;return a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){return b.push(c),a},a.sortKeys=function(d){return c[b.length-1]=d,a},a.sortValues=function(b){return d=b,a},a.rollup=function(b){return e=b,a},a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++db)d.push(g/e);else while((g=a+c*++f)=200&&a<300||a===304?d:null)}},d.send(null)},d3.text=function(a,b,c){function d(a){c(a&&a.responseText)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.json=function(a,b){d3.text(a,"application/json",function(a){b(a?JSON.parse(a):null)})},d3.html=function(a,b){d3.text(a,"text/html",function(a){if(a!=null){var c=document.createRange();c.selectNode(document.body),a=c.createContextualFragment(a)}b(a)})},d3.xml=function(a,b,c){function d(a){c(a&&a.responseXML)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)};var y={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:y,qualify:function(a){var b=a.indexOf(":"),c=a;return b>=0&&(c=a.substring(0,b),a=a.substring(b+1)),y.hasOwnProperty(c)?{space:y[c],local:a}:a}},d3.dispatch=function(){var a=new z,b=-1,c=arguments.length;while(++b0&&(d=a.substring(c+1),a=a.substring(0,c)),arguments.length<2?this[a].on(d):this[a].on(d,b)},d3.format=function(a){var b=B.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=1,k="",l=!1;h&&(h=+h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=100,k="%",i="f";break;case"p":j=100,k="%",i="r";break;case"d":l=!0,h=0;break;case"s":j=-1,i="r"}return i=="r"&&!h&&(i="g"),i=C.get(i)||E,function(a){if(l&&a%1)return"";var b=a<0&&(a=-a)?"−":d;if(j<0){var m=d3.formatPrefix(a,h);a=m.scale(a),k=m.symbol}else a*=j;a=i(a,h);if(e){var n=a.length+b.length;n=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,C=d3.map({g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){return d3.round(a,b=D(a,b)).toFixed(Math.max(0,Math.min(20,b)))}}),G=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(H);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,D(a,b))),c=1+Math.floor(1e-12+Math.log(a)/Math.LN10),c=Math.max(-24,Math.min(24,Math.floor((c<=0?c+1:c-1)/3)*3))),G[8+c/3]};var I=R(2),J=R(3),K=function(){return Q},L=d3.map({linear:K,poly:R,quad:function(){return I},cubic:function(){return J},sin:function(){return S},exp:function(){return T},circle:function(){return U},elastic:V,back:W,bounce:function(){return X}}),M=d3.map({"in":Q,out:O,"in-out":P,"out-in":function(a){return P(O(a))}});d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return c=L.get(c)||K,d=M.get(d)||Q,N(d(c.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){return b-=a,function(c){return a+b*c}},d3.interpolateRound=function(a,b){return b-=a,function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;_.lastIndex=0;for(d=0;c=_.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=_.lastIndex;f180?k+=360:k-j>180&&(j+=360),d.push({i:c.push(c.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(j,k)})):k&&c.push(c.pop()+"rotate("+k+")"),l!=m?d.push({i:c.push(c.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(l,m)}):m&&c.push(c.pop()+"skewX("+m+")"),n[0]!=o[0]||n[1]!=o[1]?(e=c.push(c.pop()+"scale(",null,",",null,")"),d.push({i:e-4,x:d3.interpolateNumber(n[0],o[0])},{i:e-2,x:d3.interpolateNumber(n[1],o[1])})):(o[0]!=1||o[1]!=1)&&c.push(c.pop()+"scale("+o+")"),e=d.length,function(a){var b=-1,f;while(++b180?f-=360:f<-180&&(f+=360),function(a){return bm(c+f*a,d+g*a,e+h*a).toString()}},d3.interpolateArray=function(a,b){var c=[],d=[],e=a.length,f=b.length,g=Math.min(a.length,b.length),h;for(h=0;h1){while(++e=0;)if(f=c[d])e&&e!==f.nextSibling&&e.parentNode.insertBefore(f,e),e=f;return this},bt.sort=function(a){a=bz.apply(this,arguments);for(var b=-1,c=this.length;++b0&&(a=a.substring(0,e)),arguments.length<2?(e=this.node()[d])&&e._:this.each(function(e,f){function i(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this,h=g[d];h&&(g.removeEventListener(a,h,h.$),delete g[d]),b&&(g.addEventListener(a,g[d]=i,i.$=c),i._=b)})},bt.each=function(a){return bA(this,function(b,c,d){a.call(b,b.__data__,c,d)})},bt.call=function(a){return a.apply(this,(arguments[0]=this,arguments)),this},bt.empty=function(){return!this.node()},bt.node=function(a){for(var b=0,c=this.length;b=cF?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=cG,b=cH,c=cI,d=cJ;return e.innerRadius=function(b){return arguments.length?(a=p(b),e):a},e.outerRadius=function(a){return arguments.length?(b=p(a),e):b},e.startAngle=function(a){return arguments.length?(c=p(a),e):c},e.endAngle=function(a){return arguments.length?(d=p(a),e):d},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+cE;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cE=-Math.PI/2,cF=2*Math.PI-1e-6;d3.svg.line=function(){return cK(m)};var cN="linear",cO=d3.map({linear:cP,"step-before":cQ,"step-after":cR,basis:cX,"basis-open":cY,"basis-closed":cZ,bundle:c$,cardinal:cU,"cardinal-open":cS,"cardinal-closed":cT,monotone:dh}),da=[0,2/3,1/3,0],db=[0,1/3,2/3,0],dc=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cK(di);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cQ.reverse=cR,cR.reverse=cQ,d3.svg.area=function(){return dj(Object)},d3.svg.area.radial=function(){var a=dj(di);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1,a},d3.svg.chord=function(){function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1,f.a1-f.a0)+j(f.r,f.p1,e.r,e.p0))+"Z"}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+cE,k=e.call(a,h,g)+cE;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function i(a,b,c){return"A"+a+","+a+" 0 "+ +(c>Math.PI)+",1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=dk,b=dl,c=dm,d=cI,e=cJ;return f.radius=function(a){return arguments.length?(c=p(a),f):c},f.source=function(b){return arguments.length?(a=p(b),f):a},f.target=function(a){return arguments.length?(b=p(a),f):b},f.startAngle=function(a){return arguments.length?(d=p(a),f):d},f.endAngle=function(a){return arguments.length?(e=p(a),f):e},f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(c),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=dk,b=dl,c=dq;return d.source=function(b){return arguments.length?(a=p(b),d):a},d.target=function(a){return arguments.length?(b=p(a),d):b},d.projection=function(a){return arguments.length?(c=a,d):c},d},d3.svg.diagonal +.radial=function(){var a=d3.svg.diagonal(),b=dq,c=a.projection;return a.projection=function(a){return arguments.length?c(dr(b=a)):b},a},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function c(c,d){return(dv.get(a.call(this,c,d))||du)(b.call(this,c,d))}var a=dt,b=ds;return c.type=function(b){return arguments.length?(a=p(b),c):a},c.size=function(a){return arguments.length?(b=p(a),c):b},c};var dv=d3.map({circle:du,cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*dx)),c=b*dx;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/dw),c=b*dw/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/dw),c=b*dw/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}});d3.svg.symbolTypes=dv.keys();var dw=Math.sqrt(3),dx=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function k(k){k.each(function(){var k=d3.select(this),l=h==null?a.ticks?a.ticks.apply(a,g):a.domain():h,m=i==null?a.tickFormat?a.tickFormat.apply(a,g):String:i,n=dA(a,l,j),o=k.selectAll(".minor").data(n,String),p=o.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),q=d3.transition(o.exit()).style("opacity",1e-6).remove(),r=d3.transition(o).style("opacity",1),s=k.selectAll("g").data(l,String),t=s.enter().insert("g","path").style("opacity",1e-6),u=d3.transition(s.exit()).style("opacity",1e-6).remove(),v=d3.transition(s).style("opacity",1),w,x=cf(a),y=k.selectAll(".domain").data([0]),z=y.enter().append("path").attr("class","domain"),A=d3.transition(y),B=a.copy(),C=this.__chart__||B;this.__chart__=B,t.append("line").attr("class","tick"),t.append("text");var D=t.select("line"),E=v.select("line"),F=s.select("text").text(m),G=t.select("text"),H=v.select("text");switch(b){case"bottom":w=dy,p.attr("y2",d),r.attr("x2",0).attr("y2",d),D.attr("y2",c),G.attr("y",Math.max(c,0)+f),E.attr("x2",0).attr("y2",c),H.attr("x",0).attr("y",Math.max(c,0)+f),F.attr("dy",".71em").attr("text-anchor","middle"),A.attr("d","M"+x[0]+","+e+"V0H"+x[1]+"V"+e);break;case"top":w=dy,p.attr("y2",-d),r.attr("x2",0).attr("y2",-d),D.attr("y2",-c),G.attr("y",-(Math.max(c,0)+f)),E.attr("x2",0).attr("y2",-c),H.attr("x",0).attr("y",-(Math.max(c,0)+f)),F.attr("dy","0em").attr("text-anchor","middle"),A.attr("d","M"+x[0]+","+ -e+"V0H"+x[1]+"V"+ -e);break;case"left":w=dz,p.attr("x2",-d),r.attr("x2",-d).attr("y2",0),D.attr("x2",-c),G.attr("x",-(Math.max(c,0)+f)),E.attr("x2",-c).attr("y2",0),H.attr("x",-(Math.max(c,0)+f)).attr("y",0),F.attr("dy",".32em").attr("text-anchor","end"),A.attr("d","M"+ -e+","+x[0]+"H0V"+x[1]+"H"+ -e);break;case"right":w=dz,p.attr("x2",d),r.attr("x2",d).attr("y2",0),D.attr("x2",c),G.attr("x",Math.max(c,0)+f),E.attr("x2",c).attr("y2",0),H.attr("x",Math.max(c,0)+f).attr("y",0),F.attr("dy",".32em").attr("text-anchor","start"),A.attr("d","M"+e+","+x[0]+"H0V"+x[1]+"H"+e)}if(a.ticks)t.call(w,C),v.call(w,B),u.call(w,B),p.call(w,C),r.call(w,B),q.call(w,B);else{var I=B.rangeBand()/2,J=function(a){return B(a)+I};t.call(w,J),v.call(w,J)}})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h=null,i,j=0;return k.scale=function(b){return arguments.length?(a=b,k):a},k.orient=function(a){return arguments.length?(b=a,k):b},k.ticks=function(){return arguments.length?(g=arguments,k):g},k.tickValues=function(a){return arguments.length?(h=a,k):h},k.tickFormat=function(a){return arguments.length?(i=a,k):i},k.tickSize=function(a,b,f){if(!arguments.length)return c;var g=arguments.length-1;return c=+a,d=g>1?+b:c,e=g>0?+arguments[g]:c,k},k.tickPadding=function(a){return arguments.length?(f=+a,k):f},k.tickSubdivide=function(a){return arguments.length?(j=+a,k):j},k},d3.svg.brush=function(){function g(a){a.each(function(){var a=d3.select(this),e=a.selectAll(".background").data([0]),f=a.selectAll(".extent").data([0]),l=a.selectAll(".resize").data(d,String),m;a.style("pointer-events","all").on("mousedown.brush",k).on("touchstart.brush",k),e.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.enter().append("rect").attr("class","extent").style("cursor","move"),l.enter().append("g").attr("class",function(a){return"resize "+a}).style("cursor",function(a){return dB[a]}).append("rect").attr("x",function(a){return/[ew]$/.test(a)?-3:null}).attr("y",function(a){return/^[ns]/.test(a)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),l.style("display",g.empty()?"none":null),l.exit().remove(),b&&(m=cf(b),e.attr("x",m[0]).attr("width",m[1]-m[0]),i(a)),c&&(m=cf(c),e.attr("y",m[0]).attr("height",m[1]-m[0]),j(a)),h(a)})}function h(a){a.selectAll(".resize").attr("transform",function(a){return"translate("+e[+/e$/.test(a)][0]+","+e[+/^s/.test(a)][1]+")"})}function i(a){a.select(".extent").attr("x",e[0][0]),a.selectAll(".extent,.n>rect,.s>rect").attr("width",e[1][0]-e[0][0])}function j(a){a.select(".extent").attr("y",e[0][1]),a.selectAll(".extent,.e>rect,.w>rect").attr("height",e[1][1]-e[0][1])}function k(){function x(){var a=d3.event.changedTouches;return a?d3.touches(d,a)[0]:d3.mouse(d)}function y(){d3.event.keyCode==32&&(q||(r=null,s[0]-=e[1][0],s[1]-=e[1][1],q=2),Y())}function z(){d3.event.keyCode==32&&q==2&&(s[0]+=e[1][0],s[1]+=e[1][1],q=0,Y())}function A(){var a=x(),d=!1;t&&(a[0]+=t[0],a[1]+=t[1]),q||(d3.event.altKey?(r||(r=[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]),s[0]=e[+(a[0]0?e=c:e=0:c>0&&(b.start({type:"start",alpha:e=c}),d3.timer(a.tick)),a):e},a.start=function(){function p(a,c){var d=t(b),e=-1,f=d.length,g;while(++ee&&(e=h),d.push(h)}for(g=0;g0){f=-1;while(++f=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]))}return g}var a=!0,b=Number,c=ed,d=eb;return e.value=function(a){return arguments.length?(b=a,e):b},e.range=function(a){return arguments.length?(c=p(a),e):c},e.bins=function(a){return arguments.length?(d=typeof a=="number"?function(b){return ec(b,a)}:p(a),e):d},e.frequency=function(b){return arguments.length?(a=!!b,e):a},e},d3.layout.hierarchy=function(){function d(e,g,h){var i=b.call(f,e,g),j=ej?e:{data:e};j.depth=g,h.push(j);if(i&&(l=i.length)){var k=-1,l,m=j.children=[],n=0,o=g+1,p;while(++k0&&(eH(eI(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!eA(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!ez(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];eF(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=eB(g,eD),l=eB(g,eC),m=eB(g,eE),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return eF(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=ey,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},ee(d,a)},d3.layout.treemap=function(){function i(a,b){var c=-1,d=a.length,e,f;while(++c0)d.push(g=f[o-1]),d.area+=g.area,(k=l(d,n))<=h?(f.pop(),h=k):(d.area-=d.pop().area,m(d,n,c,!1),n=Math.min(c.dx,c.dy),d.length=d.area=0,h=Infinity);d.length&&(m(d,n,c,!0),d.length=d.area=0),b.forEach(j)}}function k(a){var b=a.children;if(b&&b.length){var c=e(a),d=b.slice(),f,g=[];i(d,c.dx*c.dy/a.value),g.area=0;while(f=d.pop())g.push(f),g.area+=f.area,f.z!=null&&(m(g,f.z?c.dx:c.dy,c,!d.length),g.length=g.area=0);b.forEach(k)}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++ge&&(e=d)}return c*=c,b*=b,c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++fd.dx)j=d.dx;while(++f=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++50?b:f<-140?c:g<21?d:a)(e)}var a=d3.geo.albers(),b=d3.geo.albers().origin([-160,60]).parallels([55,65]),c=d3.geo.albers().origin([-160,20]).parallels([8,18]),d=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(f){return arguments.length?(a.scale(f),b.scale(f*.6),c.scale(f),d.scale(f*1.5),e.translate(a.translate())):a.scale()},e.translate=function(f){if(!arguments.length)return a.translate();var g=a.scale()/1e3,h=f[0],i=f[1];return a.translate(f),b.translate([h-400*g,i+170*g]),c.translate([h-190*g,i+200*g]),d.translate([h+580*g,i+430*g]),e},e.scale(a.scale())},d3.geo.bonne=function(){function g(g){var h=g[0]*eN-c,i=g[1]*eN-d;if(e){var j=f+e-i,k=h*Math.cos(i)/j;h=j*Math.sin(k),i=j*Math.cos(k)-f}else h*=Math.cos(i),i*=-1;return[a*h+b[0],a*i+b[1]]}var a=200,b=[480,250],c,d,e,f;return g.invert=function(d){var g=(d[0]-b[0])/a,h=(d[1]-b[1])/a;if(e){var i=f+h,j=Math.sqrt(g*g+i*i);h=f+e-j,g=c+j*Math.atan2(g,i)/Math.cos(h)}else h*=-1,g/=Math.cos(h);return[g/eN,h/eN]},g.parallel=function(a){return arguments.length?(f=1/Math.tan(e=a*eN),g):e/eN},g.origin=function(a){return arguments.length?(c=a[0]*eN,d=a[1]*eN,g):[c/eN,d/eN]},g.scale=function(b){return arguments.length?(a=+b,g):a},g.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],g):b},g.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function c(c){var d=c[0]/360,e=-c[1]/360;return[a*d+b[0],a*e+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,-360*e]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.mercator=function(){function c(c){var d=c[0]/360,e=-(Math.log(Math.tan(Math.PI/4+c[1]*eN/2))/eN)/360;return[a*d+b[0],a*Math.max(-0.5,Math.min(.5,e))+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,2*Math.atan(Math.exp(-360*e*eN))/eN-90]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.path=function(){function e(c,e){typeof a=="function"&&(b=eP(a.apply(this,arguments))),g(c);var f=d.length?d.join(""):null;return d=[],f}function f(a){return c(a).join(",")}function i(a){var b=l(a[0]),c=0,d=a.length;while(++c0){d.push("M");while(++h0){d.push("M");while(++kd&&(d=a),fe&&(e=f)}),[[b,c],[d,e]]};var eR={Feature:eS,FeatureCollection:eT,GeometryCollection:eU,LineString:eV,MultiLineString:eW,MultiPoint:eV,MultiPolygon:eX,Point:eY,Polygon:eZ};d3.geo.circle=function(){function e(){}function f(a){return d.distance(a)=k*k+l*l?d[f].index=-1:(d[m].index=-1,o=d[f].angle,m=f,n=g)):(o=d[f].angle,m=f,n=g);e.push(h);for(f=0,g=0;f<2;++g)d[g].index!==-1&&(e.push(d[g].index),f++);p=e.length;for(;g=0?(c=a.ep.r,d=a.ep.l):(c=a.ep.l,d=a.ep.r),a.a===1?(g=c?c.y:-1e6,e=a.c-a.b*g,h=d?d.y:1e6,f=a.c-a.b*h):(e=c?c.x:-1e6,g=a.c-a.a*e,f=d?d.x:1e6,h=a.c-a.a*f);var i=[e,g],j=[f,h];b[a.region.l.index].push(i,j),b[a.region.r.index].push(i,j)}),b.map(function(b,c){var d=a[c][0],e=a[c][1];return b.forEach(function(a){a.angle=Math.atan2(a[0]-d,a[1]-e)}),b.sort(function(a,b){return a.angle-b.angle}).filter(function(a,c){return!c||a.angle-b[c-1].angle>1e-10})})};var fi={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];return fj(a,function(c){b[c.region.l.index].push(a[c.region.r.index])}),b.forEach(function(b,d){var e=a[d],f=e[0],g=e[1];b.forEach(function(a){a.angle=Math.atan2(a[0]-f,a[1]-g)}),b.sort(function(a,b){return a.angle-b.angle});for(var h=0,i=b.length-1;h=g,j=b.y>=h,l=(j<<1)+i;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=fk()),i?c=g:e=g,j?d=h:f=h,k(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(fm));if(arguments.length<5)if(arguments.length===3)e=d=c,c=b;else{b=c=Infinity,d=e=-Infinity;while(++gd&&(d=f.x),f.y>e&&(e=f.y);var i=d-b,j=e-c;i>j?e=c+i:d=b+j}var m=fk();return m.add=function(a){k(m,a,b,c,d,e)},m.visit=function(a){fl(a,m,b,c,d,e)},a.forEach(m.add),m},d3.time={};var fn=Date;fo.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){fp.setUTCDate.apply(this._,arguments)},setDay:function(){fp.setUTCDay.apply(this._,arguments)},setFullYear:function(){fp.setUTCFullYear.apply(this._,arguments)},setHours:function(){fp.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){fp.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){fp.setUTCMinutes.apply(this._,arguments)},setMonth:function(){fp.setUTCMonth.apply(this._,arguments)},setSeconds:function(){fp.setUTCSeconds.apply(this._,arguments)},setTime:function(){fp.setTime.apply(this._,arguments)}};var fp=Date.prototype;d3.time.format=function(a){function c(c){var d=[],e=-1,f=0,g,h;while(++e=12?"PM":"AM"},S:function(a){return fr(a.getSeconds())},U:function(a){return fr(d3.time.sundayOfYear(a))},w:function(a){return a.getDay()},W:function(a){return fr(d3.time.mondayOfYear(a))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return fr(a.getFullYear()%100)},Y:function(a){return ft(a.getFullYear()%1e4)},Z:fX,"%":function(a){return"%"}},fw={a:fx,A:fy,b:fC,B:fE,c:fI,d:fP,e:fP,H:fQ,I:fQ,L:fT,m:fO,M:fR,p:fV,S:fS,x:fJ,X:fK,y:fM,Y:fL},fz=/^(?:sun|mon|tue|wed|thu|fri|sat)/i,fA=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i,fB=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],fD=d3.map({jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}),fF=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,fG=d3.map({january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11}),fH=["January","February","March","April","May","June","July","August","September","October","November","December"],fU=/\s*\d+/,fW=d3.map({am:0,pm:1});d3.time.format.utc=function(a){function c(a){try{fn=fo;var c=new fn;return c._=a,b(c)}finally{fn=Date}}var b=d3.time.format(a);return c.parse=function(a){try{fn=fo;var c=b.parse(a);return c&&c._}finally{fn=Date}},c.toString=b.toString,c};var fY=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?fZ:fY,fZ.parse=function(a){var b=new Date(a);return isNaN(b)?null:b},fZ.toString=fY.toString,d3.time.second=f$(function(a){return new fn(Math.floor(a/1e3)*1e3)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*1e3)},function(a){return a.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=f$(function(a){return new fn(Math.floor(a/6e4)*6e4)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*6e4)},function(a){return a.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=f$(function(a){var b=a.getTimezoneOffset()/60;return new fn((Math.floor(a/36e5-b)+b)*36e5)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*36e5)},function(a){return a.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=f$(function(a){return new fn(a.getFullYear(),a.getMonth(),a.getDate())},function(a,b){a.setDate(a.getDate()+b)},function(a){return a.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(a){var b=d3.time.year(a);return Math.floor((a-b)/864e5-(a.getTimezoneOffset()-b.getTimezoneOffset())/1440)},fB.forEach(function(a,b){a=a.toLowerCase(),b=7-b;var c=d3.time[a]=f$(function(a){return(a=d3.time.day(a)).setDate(a.getDate()-(a.getDay()+b)%7),a},function(a,b){a.setDate(a.getDate()+Math.floor(b)*7)},function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)-(c!==b)});d3.time[a+"s"]=c.range,d3.time[a+"s"].utc=c.utc.range,d3.time[a+"OfYear"]=function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=f$(function(a){return new fn(a.getFullYear(),a.getMonth(),1)},function(a,b){a.setMonth(a.getMonth()+b)},function(a){return a.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=f$(function(a){return new fn(a.getFullYear(),0,1)},function(a,b){a.setFullYear(a.getFullYear()+b)},function(a){return a.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var gg=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],gh=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],gi=[[d3.time.format("%Y"),function(a){return!0}],[d3.time.format("%B"),function(a){return a.getMonth()}],[d3.time.format("%b %d"),function(a){return a.getDate()!=1}],[d3.time.format("%a %d"),function(a){return a.getDay()&&a.getDate()!=1}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]],gj=d3.scale.linear(),gk=gd(gi);gh.year=function(a,b){return gj.domain(a.map(gf)).ticks(b).map(ge)},d3.time.scale=function(){return ga(d3.scale.linear(),gh,gk)};var gl=gh.map(function(a){return[a[0].utc,a[1]]}),gm=[[d3.time.format.utc("%Y"),function(a){return!0}],[d3.time.format.utc("%B"),function(a){return a.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(a){return a.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(a){return a.getUTCDay()&&a.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(a){return a.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(a){return a.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(a){return a.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(a){return a.getUTCMilliseconds()}]],gn=gd(gm);gl.year=function(a,b){return gj.domain(a.map(gp)).ticks(b).map(go)},d3.time.scale.utc=function(){return ga(d3.scale.linear(),gl,gn)}})(); \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/iframe-embed.js b/book/common/ext/codelens/v3/js/iframe-embed.js new file mode 100644 index 0000000..6f56550 --- /dev/null +++ b/book/common/ext/codelens/v3/js/iframe-embed.js @@ -0,0 +1,185 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) 2010-2013 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// Pre-reqs: pytutor.js and jquery.ba-bbq.min.js should be imported BEFORE this file + + +// backend scripts to execute (Python 2 and 3 variants, if available) +// make two copies of ../web_exec.py and give them the following names, +// then change the first line (starting with #!) to the proper version +// of the Python interpreter (i.e., Python 2 or Python 3). +//var python2_backend_script = 'web_exec_py2.py'; +//var python3_backend_script = 'web_exec_py3.py'; + +// uncomment below if you're running on Google App Engine using the built-in app.yaml +var python2_backend_script = 'exec'; +var python3_backend_script = null; + + +var myVisualizer = null; // singleton ExecutionVisualizer instance + + +$(document).ready(function() { + var preseededCode = $.bbq.getState('code'); + + var pyState = $.bbq.getState('py'); + var verticalStackBool = ($.bbq.getState('verticalStack') == 'true'); // boolean + var heapPrimitivesBool = ($.bbq.getState('heapPrimitives') == 'true'); + var drawParentPointerBool = ($.bbq.getState('drawParentPointers') == 'true'); + var textRefsBool = ($.bbq.getState('textReferences') == 'true'); + var showOnlyOutputsBool = ($.bbq.getState('showOnlyOutputs') == 'true'); + + // set up all options in a JS object + var options = {cumulative_mode: ($.bbq.getState('cumulative') == 'true'), + heap_primitives: heapPrimitivesBool, + show_only_outputs: showOnlyOutputsBool, + py_crazy_mode: ($.bbq.getState('py') == '2crazy')}; + + + var preseededCurInstr = Number($.bbq.getState('curInstr')); + if (!preseededCurInstr) { + preseededCurInstr = 0; + } + + var backend_script = null; + if (pyState == '2') { + backend_script = python2_backend_script; + } + else if (pyState == '3') { + backend_script = python3_backend_script; + } + + if (!backend_script) { + alert('Error: This server is not configured to run Python ' + $('#pythonVersionSelector').val()); + return; + } + + + // David Pritchard's code for resizeContainer option ... + var resizeContainer = ($.bbq.getState('resizeContainer') == 'true'); + + if (resizeContainer) { + function findContainer() { + var ifs = window.top.document.getElementsByTagName("iframe"); + for(var i = 0, len = ifs.length; i < len; i++) { + var f = ifs[i]; + var fDoc = f.contentDocument || f.contentWindow.document; + if(fDoc === document) { + return f; + } + } + } + + var container = findContainer(); + + function resizeContainerNow() { + $(container).height($("#vizDiv").height()+20); + }; + } + + + $.get(backend_script, + {user_script : preseededCode, + options_json: JSON.stringify(options)}, + function(dataFromBackend) { + var trace = dataFromBackend.trace; + + // don't enter visualize mode if there are killer errors: + if (!trace || + (trace.length == 0) || + (trace[trace.length - 1].event == 'uncaught_exception')) { + + if (trace.length == 1) { + alert(trace[0].exception_msg); + } + else if (trace[trace.length - 1].exception_msg) { + alert(trace[trace.length - 1].exception_msg); + } + else { + alert("Whoa, unknown error! Reload to try again, or report a bug to philip@pgbovine.net\n\n(Click the 'Generate URL' button to include a unique URL in your email bug report.)"); + } + } + else { + var startingInstruction = 0; + + // only do this at most ONCE, and then clear out preseededCurInstr + if (preseededCurInstr && preseededCurInstr < trace.length) { // NOP anyways if preseededCurInstr is 0 + startingInstruction = preseededCurInstr; + } + + myVisualizer = new ExecutionVisualizer('vizDiv', + dataFromBackend, + {startingInstruction: preseededCurInstr, + embeddedMode: true, + verticalStack: verticalStackBool, + disableHeapNesting: heapPrimitivesBool, + drawParentPointers: drawParentPointerBool, + textualMemoryLabels: textRefsBool, + showOnlyOutputs: showOnlyOutputsBool, + highlightLines: typeof $.bbq.getState("highlightLines") !== "undefined", + pyCrazyMode: ($.bbq.getState('py') == '2crazy'), + updateOutputCallback: (resizeContainer ? resizeContainerNow : null) + }); + + // set keyboard bindings + // VERY IMPORTANT to clear and reset this every time or + // else the handlers might be bound multiple times + $(document).unbind('keydown'); + $(document).keydown(function(k) { + if (k.keyCode == 37) { // left arrow + if (myVisualizer.stepBack()) { + k.preventDefault(); // don't horizontally scroll the display + } + } + else if (k.keyCode == 39) { // right arrow + if (myVisualizer.stepForward()) { + k.preventDefault(); // don't horizontally scroll the display + } + } + }); + } + }, + "json"); + + + // log a generic AJAX error handler + $(document).ajaxError(function() { + alert("Online Python Tutor server error (possibly due to memory/resource overload)."); + }); + + + // redraw connector arrows on window resize + $(window).resize(function() { + if (typeof appMode !== "undefined" && appMode == 'display') { + myVisualizer.redrawConnectors(); + } + }); + +}); + diff --git a/book/common/ext/codelens/v3/js/index.js b/book/common/ext/codelens/v3/js/index.js new file mode 100644 index 0000000..3747abd --- /dev/null +++ b/book/common/ext/codelens/v3/js/index.js @@ -0,0 +1,16 @@ +var demoTrace = {"code": "def listSum(numbers):\n if not numbers:\n return 0\n else:\n (f, rest) = numbers\n return f + listSum(rest)\n\nmyList = (1, (2, (3, None)))\ntotal = listSum(myList)\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 1, "event": "step_line"}, {"ordered_globals": ["listSum"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"__return__": 0, "numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"__return__": 3, "numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"__return__": 5, "numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"__return__": 6, "numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList", "total"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"total": 6, "myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "return"}]}; + + +$(document).ready(function() { + // for rounded corners + $(".activityPane").corner('15px'); + + var demoViz = new ExecutionVisualizer('demoViz', demoTrace, {embeddedMode: true, + editCodeBaseURL: 'visualize.html'}); + + // redraw connector arrows on window resize + $(window).resize(function() { + demoViz.redrawConnectors(); + }); +}); + diff --git a/book/common/ext/codelens/v3/js/jquery-1.6.min.js b/book/common/ext/codelens/v3/js/jquery-1.6.min.js new file mode 100644 index 0000000..c72011d --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery-1.6.min.js @@ -0,0 +1,16 @@ +/*! + * jQuery JavaScript Library v1.6 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon May 2 13:50:00 2011 -0400 + */ +(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(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(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]===""&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){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:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery-1.8.2.min.js b/book/common/ext/codelens/v3/js/jquery-1.8.2.min.js new file mode 100644 index 0000000..f65cf1d --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery-1.8.2.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.2 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,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(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
    a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
    t
    ",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
    ",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
    ",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

    ",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
    ","
    "]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
    ").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery-ui-1.8.21.custom.min.js b/book/common/ext/codelens/v3/js/jquery-ui-1.8.21.custom.min.js new file mode 100644 index 0000000..e060fdc --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery-ui-1.8.21.custom.min.js @@ -0,0 +1,21 @@ +/*! jQuery UI - v1.8.21 - 2012-06-05 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.21",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.21 - 2012-06-05 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.position.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?a.isFunction(b)?this.each(function(c){a(this).offset(b.call(this,c,a(this).offset()))}):this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.21 - 2012-06-05 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("
    ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;ic&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.21"})})(jQuery);; \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery-ui-1.8.24.custom.min.js b/book/common/ext/codelens/v3/js/jquery-ui-1.8.24.custom.min.js new file mode 100644 index 0000000..a684be3 --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery-ui-1.8.24.custom.min.js @@ -0,0 +1,25 @@ +/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.24",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a("").outerWidth(1).jquery||a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.curCSS||(a.curCSS=a.css),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.position.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?a.isFunction(b)?this.each(function(c){a(this).offset(b.call(this,c,a(this).offset()))}):this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),a.curCSS||(a.curCSS=a.css),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.resizable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('
    ').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=!0,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=c.handles||(a(".ui-resizable-handle",this.element).length?{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"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e
    ');h.css({zIndex:c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){if(c.disabled)return;a(this).removeClass("ui-resizable-autohide"),b._handles.show()},function(){if(c.disabled)return;b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}return this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement),this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");return a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b),!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);return l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui()),!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}return a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),ea.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;return p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null),a},_proportionallyResize:function(){var b=this.options;if(!this._proportionallyResizeElements.length)return;var c=this.helper||this.element;for(var d=0;d');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:"1.8.24"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!i)return;e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/d.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*d.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("
    ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;ic&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.24"})})(jQuery);; \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery.ba-bbq.min.js b/book/common/ext/codelens/v3/js/jquery.ba-bbq.min.js new file mode 100644 index 0000000..bcbf248 --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery.ba-bbq.min.js @@ -0,0 +1,18 @@ +/* + * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010 + * http://benalman.com/projects/jquery-bbq-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery.corner.js b/book/common/ext/codelens/v3/js/jquery.corner.js new file mode 100644 index 0000000..c416613 --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery.corner.js @@ -0,0 +1,249 @@ +/*! + * jQuery corner plugin: simple corner rounding + * Examples and documentation at: http://jquery.malsup.com/corner/ + * version 2.12 (23-MAY-2011) + * Requires jQuery v1.3.2 or later + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Dave Methvin and Mike Alsup + */ + +/** + * corner() takes a single string argument: $('#myDiv').corner("effect corners width") + * + * effect: name of the effect to apply, such as round, bevel, notch, bite, etc (default is round). + * corners: one or more of: top, bottom, tr, tl, br, or bl. (default is all corners) + * width: width of the effect; in the case of rounded corners this is the radius. + * specify this value using the px suffix such as 10px (yes, it must be pixels). + */ +;(function($) { + +var style = document.createElement('div').style, + moz = style['MozBorderRadius'] !== undefined, + webkit = style['WebkitBorderRadius'] !== undefined, + radius = style['borderRadius'] !== undefined || style['BorderRadius'] !== undefined, + mode = document.documentMode || 0, + noBottomFold = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8), + + expr = $.browser.msie && (function() { + var div = document.createElement('div'); + try { div.style.setExpression('width','0+0'); div.style.removeExpression('width'); } + catch(e) { return false; } + return true; + })(); + +$.support = $.support || {}; +$.support.borderRadius = moz || webkit || radius; // so you can do: if (!$.support.borderRadius) $('#myDiv').corner(); + +function sz(el, p) { + return parseInt($.css(el,p))||0; +}; +function hex2(s) { + s = parseInt(s).toString(16); + return ( s.length < 2 ) ? '0'+s : s; +}; +function gpc(node) { + while(node) { + var v = $.css(node,'backgroundColor'), rgb; + if (v && v != 'transparent' && v != 'rgba(0, 0, 0, 0)') { + if (v.indexOf('rgb') >= 0) { + rgb = v.match(/\d+/g); + return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]); + } + return v; + } + if (node.nodeName.toLowerCase() == 'html') + break; + node = node.parentNode; // keep walking if transparent + } + return '#ffffff'; +}; + +function getWidth(fx, i, width) { + switch(fx) { + case 'round': return Math.round(width*(1-Math.cos(Math.asin(i/width)))); + case 'cool': return Math.round(width*(1+Math.cos(Math.asin(i/width)))); + case 'sharp': return width-i; + case 'bite': return Math.round(width*(Math.cos(Math.asin((width-i-1)/width)))); + case 'slide': return Math.round(width*(Math.atan2(i,width/i))); + case 'jut': return Math.round(width*(Math.atan2(width,(width-i-1)))); + case 'curl': return Math.round(width*(Math.atan(i))); + case 'tear': return Math.round(width*(Math.cos(i))); + case 'wicked': return Math.round(width*(Math.tan(i))); + case 'long': return Math.round(width*(Math.sqrt(i))); + case 'sculpt': return Math.round(width*(Math.log((width-i-1),width))); + case 'dogfold': + case 'dog': return (i&1) ? (i+1) : width; + case 'dog2': return (i&2) ? (i+1) : width; + case 'dog3': return (i&3) ? (i+1) : width; + case 'fray': return (i%2)*width; + case 'notch': return width; + case 'bevelfold': + case 'bevel': return i+1; + case 'steep': return i/2 + 1; + case 'invsteep':return (width-i)/2+1; + } +}; + +$.fn.corner = function(options) { + // in 1.3+ we can fix mistakes with the ready state + if (this.length == 0) { + if (!$.isReady && this.selector) { + var s = this.selector, c = this.context; + $(function() { + $(s,c).corner(options); + }); + } + return this; + } + + return this.each(function(index){ + var $this = $(this), + // meta values override options + o = [$this.attr($.fn.corner.defaults.metaAttr) || '', options || ''].join(' ').toLowerCase(), + keep = /keep/.test(o), // keep borders? + cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]), // corner color + sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]), // strip color + width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10, // corner width + re = /round|bevelfold|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dogfold|dog|invsteep|steep/, + fx = ((o.match(re)||['round'])[0]), + fold = /dogfold|bevelfold/.test(o), + edges = { T:0, B:1 }, + opts = { + TL: /top|tl|left/.test(o), TR: /top|tr|right/.test(o), + BL: /bottom|bl|left/.test(o), BR: /bottom|br|right/.test(o) + }, + // vars used in func later + strip, pad, cssHeight, j, bot, d, ds, bw, i, w, e, c, common, $horz; + + if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR ) + opts = { TL:1, TR:1, BL:1, BR:1 }; + + // support native rounding + if ($.fn.corner.defaults.useNative && fx == 'round' && (radius || moz || webkit) && !cc && !sc) { + if (opts.TL) + $this.css(radius ? 'border-top-left-radius' : moz ? '-moz-border-radius-topleft' : '-webkit-border-top-left-radius', width + 'px'); + if (opts.TR) + $this.css(radius ? 'border-top-right-radius' : moz ? '-moz-border-radius-topright' : '-webkit-border-top-right-radius', width + 'px'); + if (opts.BL) + $this.css(radius ? 'border-bottom-left-radius' : moz ? '-moz-border-radius-bottomleft' : '-webkit-border-bottom-left-radius', width + 'px'); + if (opts.BR) + $this.css(radius ? 'border-bottom-right-radius' : moz ? '-moz-border-radius-bottomright' : '-webkit-border-bottom-right-radius', width + 'px'); + return; + } + + strip = document.createElement('div'); + $(strip).css({ + overflow: 'hidden', + height: '1px', + minHeight: '1px', + fontSize: '1px', + backgroundColor: sc || 'transparent', + borderStyle: 'solid' + }); + + pad = { + T: parseInt($.css(this,'paddingTop'))||0, R: parseInt($.css(this,'paddingRight'))||0, + B: parseInt($.css(this,'paddingBottom'))||0, L: parseInt($.css(this,'paddingLeft'))||0 + }; + + if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE + if (!keep) this.style.border = 'none'; + strip.style.borderColor = cc || gpc(this.parentNode); + cssHeight = $(this).outerHeight(); + + for (j in edges) { + bot = edges[j]; + // only add stips if needed + if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) { + strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none'); + d = document.createElement('div'); + $(d).addClass('jquery-corner'); + ds = d.style; + + bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild); + + if (bot && cssHeight != 'auto') { + if ($.css(this,'position') == 'static') + this.style.position = 'relative'; + ds.position = 'absolute'; + ds.bottom = ds.left = ds.padding = ds.margin = '0'; + if (expr) + ds.setExpression('width', 'this.parentNode.offsetWidth'); + else + ds.width = '100%'; + } + else if (!bot && $.browser.msie) { + if ($.css(this,'position') == 'static') + this.style.position = 'relative'; + ds.position = 'absolute'; + ds.top = ds.left = ds.right = ds.padding = ds.margin = '0'; + + // fix ie6 problem when blocked element has a border width + if (expr) { + bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth'); + ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"'); + } + else + ds.width = '100%'; + } + else { + ds.position = 'relative'; + ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : + (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px'; + } + + for (i=0; i < width; i++) { + w = Math.max(0,getWidth(fx,i, width)); + e = strip.cloneNode(false); + e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px'; + bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild); + } + + if (fold && $.support.boxModel) { + if (bot && noBottomFold) continue; + for (c in opts) { + if (!opts[c]) continue; + if (bot && (c == 'TL' || c == 'TR')) continue; + if (!bot && (c == 'BL' || c == 'BR')) continue; + + common = { position: 'absolute', border: 'none', margin: 0, padding: 0, overflow: 'hidden', backgroundColor: strip.style.borderColor }; + $horz = $('
    ').css(common).css({ width: width + 'px', height: '1px' }); + switch(c) { + case 'TL': $horz.css({ bottom: 0, left: 0 }); break; + case 'TR': $horz.css({ bottom: 0, right: 0 }); break; + case 'BL': $horz.css({ top: 0, left: 0 }); break; + case 'BR': $horz.css({ top: 0, right: 0 }); break; + } + d.appendChild($horz[0]); + + var $vert = $('
    ').css(common).css({ top: 0, bottom: 0, width: '1px', height: width + 'px' }); + switch(c) { + case 'TL': $vert.css({ left: width }); break; + case 'TR': $vert.css({ right: width }); break; + case 'BL': $vert.css({ left: width }); break; + case 'BR': $vert.css({ right: width }); break; + } + d.appendChild($vert[0]); + } + } + } + } + }); +}; + +$.fn.uncorner = function() { + if (radius || moz || webkit) + this.css(radius ? 'border-radius' : moz ? '-moz-border-radius' : '-webkit-border-radius', 0); + $('div.jquery-corner', this).remove(); + return this; +}; + +// expose options +$.fn.corner.defaults = { + useNative: true, // true if plugin should attempt to use native browser support for border radius rounding + metaAttr: 'data-corner' // name of meta attribute to use for options +}; + +})(jQuery); diff --git a/book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.10-all-min.js b/book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.10-all-min.js new file mode 100644 index 0000000..3171abe --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.10-all-min.js @@ -0,0 +1 @@ +jsPlumbUtil={isArray:function(b){return Object.prototype.toString.call(b)==="[object Array]"},isString:function(a){return typeof a==="string"},isObject:function(a){return Object.prototype.toString.call(a)==="[object Object]"},convertStyle:function(b,a){if("transparent"===b){return b}var g=b,f=function(h){return h.length==1?"0"+h:h},c=function(h){return f(Number(h).toString(16))},d=/(rgb[a]?\()(.*)(\))/;if(b.match(d)){var e=b.match(d)[2].split(",");g="#"+c(e[0])+c(e[1])+c(e[2]);if(!a&&e.length==4){g=g+c(e[3])}}return g},gradient:function(b,a){b=jsPlumbUtil.isArray(b)?b:[b.x,b.y];a=jsPlumbUtil.isArray(a)?a:[a.x,a.y];return(a[1]-b[1])/(a[0]-b[0])},normal:function(b,a){return -1/jsPlumbUtil.gradient(b,a)},lineLength:function(b,a){b=jsPlumbUtil.isArray(b)?b:[b.x,b.y];a=jsPlumbUtil.isArray(a)?a:[a.x,a.y];return Math.sqrt(Math.pow(a[1]-b[1],2)+Math.pow(a[0]-b[0],2))},segment:function(b,a){b=jsPlumbUtil.isArray(b)?b:[b.x,b.y];a=jsPlumbUtil.isArray(a)?a:[a.x,a.y];if(a[0]>b[0]){return(a[1]>b[1])?2:1}else{return(a[1]>b[1])?3:4}},intersects:function(f,e){var c=f.x,a=f.x+f.w,k=f.y,h=f.y+f.h,d=e.x,b=e.x+e.w,i=e.y,g=e.y+e.h;return((c<=d&&d<=a)&&(k<=i&&i<=h))||((c<=b&&b<=a)&&(k<=i&&i<=h))||((c<=d&&d<=a)&&(k<=g&&g<=h))||((c<=b&&d<=a)&&(k<=g&&g<=h))||((d<=c&&c<=b)&&(i<=k&&k<=g))||((d<=a&&a<=b)&&(i<=k&&k<=g))||((d<=c&&c<=b)&&(i<=h&&h<=g))||((d<=a&&c<=b)&&(i<=h&&h<=g))},segmentMultipliers:[null,[1,-1],[1,1],[-1,1],[-1,-1]],inverseSegmentMultipliers:[null,[-1,-1],[-1,1],[1,1],[1,-1]],pointOnLine:function(a,e,b){var d=jsPlumbUtil.gradient(a,e),i=jsPlumbUtil.segment(a,e),h=b>0?jsPlumbUtil.segmentMultipliers[i]:jsPlumbUtil.inverseSegmentMultipliers[i],c=Math.atan(d),f=Math.abs(b*Math.sin(c))*h[1],g=Math.abs(b*Math.cos(c))*h[0];return{x:a.x+g,y:a.y+f}},perpendicularLineTo:function(c,d,e){var b=jsPlumbUtil.gradient(c,d),f=Math.atan(-1/b),g=e/2*Math.sin(f),a=e/2*Math.cos(f);return[{x:d.x+a,y:d.y+g},{x:d.x-a,y:d.y-g}]},findWithFunction:function(b,d){if(b){for(var c=0;c-1){c.splice(b,1)}return b!=-1},remove:function(b,c){var a=jsPlumbUtil.indexOf(b,c);if(a>-1){b.splice(a,1)}return a!=-1},addWithFunction:function(c,b,a){if(jsPlumbUtil.findWithFunction(c,a)==-1){c.push(b)}},addToList:function(d,b,c){var a=d[b];if(a==null){a=[],d[b]=a}a.push(c);return a},EventGenerator:function(){var c={},b=this;var a=["ready"];this.bind=function(d,e){jsPlumbUtil.addToList(c,d,e);return b};this.fire=function(g,h,d){if(c[g]){for(var f=0;f';var K=L.firstChild;K.style.behavior="url(#default#VML)";b.vml=K?typeof K.adj=="object":true;L.parentNode.removeChild(L)}return b.vml};var i=jsPlumbUtil.findWithFunction,J=jsPlumbUtil.indexOf,D=jsPlumbUtil.removeWithFunction,m=jsPlumbUtil.remove,u=jsPlumbUtil.addWithFunction,l=jsPlumbUtil.addToList,n=jsPlumbUtil.isArray,C=jsPlumbUtil.isString,w=jsPlumbUtil.isObject;if(!window.console){window.console={time:function(){},timeEnd:function(){},group:function(){},groupEnd:function(){},log:function(){}}}var x=null,d=function(K,L){return p.CurrentLibrary.getAttribute(F(K),L)},f=function(L,M,K){p.CurrentLibrary.setAttribute(F(L),M,K)},B=function(L,K){p.CurrentLibrary.addClass(F(L),K)},k=function(L,K){return p.CurrentLibrary.hasClass(F(L),K)},o=function(L,K){p.CurrentLibrary.removeClass(F(L),K)},F=function(K){return p.CurrentLibrary.getElementObject(K)},t=function(K){return p.CurrentLibrary.getOffset(F(K))},a=function(K){return p.CurrentLibrary.getSize(F(K))},q=jsPlumbUtil.log,I=jsPlumbUtil.group,h=jsPlumbUtil.groupEnd,H=jsPlumbUtil.time,v=jsPlumbUtil.timeEnd,r=function(){return""+(new Date()).getTime()},E=function(Z){var U=this,aa=arguments,R=false,O=Z.parameters||{},M=U.idPrefix,W=M+(new Date()).getTime(),V=null,ab=null;U._jsPlumb=Z._jsPlumb;U.getId=function(){return W};U.tooltip=Z.tooltip;U.hoverClass=Z.hoverClass||U._jsPlumb.Defaults.HoverClass||p.Defaults.HoverClass;jsPlumbUtil.EventGenerator.apply(this);this.clone=function(){var ac=new Object();U.constructor.apply(ac,aa);return ac};this.getParameter=function(ac){return O[ac]},this.getParameters=function(){return O},this.setParameter=function(ac,ad){O[ac]=ad},this.setParameters=function(ac){O=ac},this.overlayPlacements=[];var N=Z.beforeDetach;this.isDetachAllowed=function(ac){var ad=U._jsPlumb.checkCondition("beforeDetach",ac);if(N){try{ad=N(ac)}catch(ae){q("jsPlumb: beforeDetach callback failed",ae)}}return ad};var Q=Z.beforeDrop;this.isDropAllowed=function(ah,ae,af,ac,ad){var ag=U._jsPlumb.checkCondition("beforeDrop",{sourceId:ah,targetId:ae,scope:af,connection:ac,dropEndpoint:ad});if(Q){try{ag=Q({sourceId:ah,targetId:ae,scope:af,connection:ac,dropEndpoint:ad})}catch(ai){q("jsPlumb: beforeDrop callback failed",ai)}}return ag};var X=function(){if(V&&ab){var ac={};p.extend(ac,V);p.extend(ac,ab);delete U.hoverPaintStyle;if(ac.gradient&&V.fillStyle){delete ac.gradient}ab=ac}};this.setPaintStyle=function(ac,ad){V=ac;U.paintStyleInUse=V;X();if(!ad){U.repaint()}};this.getPaintStyle=function(){return V};this.setHoverPaintStyle=function(ac,ad){ab=ac;X();if(!ad){U.repaint()}};this.getHoverPaintStyle=function(){return ab};this.setHover=function(ac,ae,ad){if(!U._jsPlumb.currentlyDragging&&!U._jsPlumb.isHoverSuspended()){R=ac;if(U.hoverClass!=null&&U.canvas!=null){if(ac){L.addClass(U.canvas,U.hoverClass)}else{L.removeClass(U.canvas,U.hoverClass)}}if(ab!=null){U.paintStyleInUse=ac?ab:V;ad=ad||r();U.repaint({timestamp:ad,recalc:false})}if(U.getAttachedElements&&!ae){Y(ac,r(),U)}}};this.isHover=function(){return R};var L=p.CurrentLibrary,K=["click","dblclick","mouseenter","mouseout","mousemove","mousedown","mouseup","contextmenu"],T={mouseout:"mouseexit"},P=function(ae,af,ad){var ac=T[ad]||ad;L.bind(ae,ad,function(ag){af.fire(ac,af,ag)})},S=function(ae,ad){var ac=T[ad]||ad;L.unbind(ae,ad)};this.attachListeners=function(ad,ae){for(var ac=0;ac1){for(var ac=0;ac=0?U.overlays[V]:null};this.getOverlays=function(){return U.overlays};this.hideOverlay=function(W){var V=U.getOverlay(W);if(V){V.hide()}};this.hideOverlays=function(){for(var V=0;V0){try{for(var bw=0;bw0?J(bJ,bI)!=-1:true},bA=(!bw&&bD.length>1)?{}:[],bG=function(bJ,bK){if(!bw&&bD.length>1){var bI=bA[bJ];if(bI==null){bI=[];bA[bJ]=bI}bI.push(bK)}else{bA.push(bK)}};for(var bz in aY){if(bx(bD,bz)){for(var by=0;by=4)?[bA[2],bA[3]]:[0,0],offsets:(bA.length==6)?[bA[4],bA[5]]:[0,0],elementId:bx};by=new aa(bz);by.clone=function(){return new aa(bz)}}}}}if(!by.id){by.id="anchor_"+ak()}return by};this.makeAnchors=function(by,bw,bv){var bz=[];for(var bx=0;bx0&&bP>=ap[bI]){console.log("target element "+bI+" is full.");return false}bn.currentlyDragging=false;var bZ=F(bD.getDragObject(arguments)),bO=d(bZ,"dragId"),bX=d(bZ,"originalScope"),bU=bf[bO],bM=bU.endpoints[0],bL=bw.endpoint?p.extend({},bw.endpoint):{};bM.anchor.locked=false;if(bX){bD.setDragScope(bZ,bX)}var bS=proxyComponent.isDropAllowed(bU.sourceId,K(bK),bU.scope,bU,null);if(bU.endpointsToDeleteOnDetach){if(bM===bU.endpointsToDeleteOnDetach[0]){bU.endpointsToDeleteOnDetach[0]=null}else{if(bM===bU.endpointsToDeleteOnDetach[1]){bU.endpointsToDeleteOnDetach[1]=null}}}if(bU.suspendedEndpoint){bU.targetId=bU.suspendedEndpoint.elementId;bU.target=bD.getElementObject(bU.suspendedEndpoint.elementId);bU.endpoints[1]=bU.suspendedEndpoint}if(bS){bM.detach(bU,false,true,false);var bY=aH[bI]||bn.addEndpoint(bK,bw);if(bw.uniqueEndpoint){aH[bI]=bY}bY._makeTargetCreator=true;if(bY.anchor.positionFinder!=null){var bV=bD.getUIPosition(arguments),bR=bD.getOffset(bK),bW=bD.getSize(bK),bQ=bY.anchor.positionFinder(bV,bR,bW,bY.anchor.constructorParams);bY.anchor.x=bQ[0];bY.anchor.y=bQ[1]}var bT=bn.connect({source:bM,target:bY,scope:bX,previousConnection:bU,container:bU.parent,deleteEndpointsOnDetach:bA,doNotFireConnectionEvent:bM.endpointWillMoveAfterConnection});if(bU.endpoints[1]._makeTargetCreator&&bU.endpoints[1].connections.length<2){bn.deleteEndpoint(bU.endpoints[1])}if(bA){bT.endpointsToDeleteOnDetach=[bM,bY]}bT.repaint()}else{if(bU.suspendedEndpoint){if(bM.isReattach){bU.setHover(false);bU.floatingAnchorIndex=null;bU.suspendedEndpoint.addConnection(bU);bn.repaint(bM.elementId)}else{bM.detach(bU,false,true,true,bN)}}}};var bJ=bD.dragEvents.drop;bH.scope=bH.scope||bE;bH[bJ]=am(bH[bJ],bG);bD.initDroppable(bK,bH,true)};by=aI(by);var bC=by.length&&by.constructor!=String?by:[by];for(var bB=0;bB0?bF[0]:null,bA=bF.length>0?0:-1,bE=this,bz=function(bI,bG,bM,bL,bH){var bK=bL[0]+(bI.x*bH[0]),bJ=bL[1]+(bI.y*bH[1]);return Math.sqrt(Math.pow(bG-bK,2)+Math.pow(bM-bJ,2))},bv=bw||function(bQ,bH,bI,bJ,bG){var bL=bI[0]+(bJ[0]/2),bK=bI[1]+(bJ[1]/2);var bN=-1,bP=Infinity;for(var bM=0;bM=by.left)||(bB.left<=by.right&&bB.right>=by.right)||(bB.left<=by.left&&bB.right>=by.right)||(by.left<=bB.left&&by.right>=bB.right)),bG=((bB.top<=by.top&&bB.bottom>=by.top)||(bB.top<=by.bottom&&bB.bottom>=by.bottom)||(bB.top<=by.top&&bB.bottom>=by.bottom)||(by.top<=bB.top&&by.bottom>=bB.bottom));if(!(bA||bG)){var bD=null,bx=false,bv=false,bC=null;if(by.left>bB.left&&by.top>bB.top){bD=["right","top"]}else{if(by.left>bB.left&&bB.top>by.top){bD=["top","left"]}else{if(by.leftbB.top){bD=["left","top"]}}}}return{orientation:T.DIAGONAL,a:bD,theta:bw,theta2:bz}}else{if(bA){return{orientation:T.HORIZONTAL,a:bB.topbv[0]?1:-1},Z=function(bv){return function(bx,bw){var by=true;if(bv){if(bx[0][0]bw[0][1]}}else{if(bx[0][0]>bw[0][0]){by=true}else{by=bx[0][1]>bw[0][1]}}return by===false?-1:1}},O=function(bw,bv){var by=bw[0][0]<0?-Math.PI-bw[0][0]:Math.PI-bw[0][0],bx=bv[0][0]<0?-Math.PI-bv[0][0]:Math.PI-bv[0][0];if(by>bx){return 1}else{return bw[0][1]>bv[0][1]?1:-1}},a0={top:a8,right:Z(true),bottom:Z(true),left:O},ao=function(bv,bw){return bv.sort(bw)},al=function(bw,bv){var by=ae[bw],bz=ah[bw],bx=function(bG,bN,bC,bF,bL,bK,bB){if(bF.length>0){var bJ=ao(bF,a0[bG]),bH=bG==="right"||bG==="top",bA=a2(bG,bN,bC,bJ,bL,bK,bH);var bO=function(bR,bQ){var bP=bo([bQ[0],bQ[1]],bR.canvas);ai[bR.id]=[bP[0],bP[1],bQ[2],bQ[3]];aJ[bR.id]=bB};for(var bD=0;bD0){var bF=bA.getOffset(bG);bw[bD][bI]={id:bI,offset:{left:bF.left-bJ.left,top:bF.top-bJ.top}}}}}};bC(bz)};this.endpointAdded=function(bB){var bF=p.CurrentLibrary,bI=document.body,bz=bn.getId(bB),bH=bF.getDOMElement(bB),bA=bH.parentNode,bD=bA==bI;bv[bz]=bv[bz]?bv[bz]+1:1;while(bA!=bI){var bE=bn.getId(bA);if(by[bE]){var bK=-1,bG=bF.getElementObject(bA),bC=bF.getOffset(bG);if(bw[bE][bz]==null){var bJ=p.CurrentLibrary.getOffset(bB);bw[bE][bz]={id:bz,offset:{left:bJ.left-bC.left,top:bJ.top-bC.top}}}break}bA=bA.parentNode}};this.endpointDeleted=function(bA){if(bv[bA.elementId]){bv[bA.elementId]--;if(bv[bA.elementId]<=0){for(var bz in bw){delete bw[bz][bA.elementId]}}}};this.getElementsForDraggable=function(bz){return bw[bz]};this.reset=function(){by={};bx=[];bw={};bv={}}};bn.dragManager=new aV();var ax=function(bN){var bG=this,bx=true;bG.idPrefix="_jsplumb_c_";bG.defaultLabelLocation=0.5;bG.defaultOverlayKeys=["Overlays","ConnectionOverlays"];this.parent=bN.parent;z.apply(this,arguments);this.isVisible=function(){return bx};this.setVisible=function(bP){bx=bP;bG[bP?"showOverlays":"hideOverlays"]();if(bG.connector&&bG.connector.canvas){bG.connector.canvas.style.display=bP?"block":"none"}};this.source=F(bN.source);this.target=F(bN.target);if(bN.sourceEndpoint){this.source=bN.sourceEndpoint.endpointWillMoveTo||bN.sourceEndpoint.getElement()}if(bN.targetEndpoint){this.target=bN.targetEndpoint.getElement()}bG.previousConnection=bN.previousConnection;var bD=bN.cost;bG.getCost=function(){return bD};bG.setCost=function(bP){bD=bP};var bB=bN.bidirectional===false?false:true;bG.isBidirectional=function(){return bB};this.sourceId=d(this.source,"id");this.targetId=d(this.target,"id");this.getAttachedElements=function(){return bG.endpoints};this.scope=bN.scope;this.endpoints=[];this.endpointStyles=[];var bM=function(bQ,bP){if(bQ){return bn.makeAnchor(bQ,bP,bn)}},bK=function(bP,bV,bQ,bS,bT,bR,bU){if(bP){bG.endpoints[bV]=bP;bP.addConnection(bG)}else{if(!bQ.endpoints){bQ.endpoints=[null,null]}var b1=bQ.endpoints[bV]||bQ.endpoint||bn.Defaults.Endpoints[bV]||p.Defaults.Endpoints[bV]||bn.Defaults.Endpoint||p.Defaults.Endpoint;if(!bQ.endpointStyles){bQ.endpointStyles=[null,null]}if(!bQ.endpointHoverStyles){bQ.endpointHoverStyles=[null,null]}var bZ=bQ.endpointStyles[bV]||bQ.endpointStyle||bn.Defaults.EndpointStyles[bV]||p.Defaults.EndpointStyles[bV]||bn.Defaults.EndpointStyle||p.Defaults.EndpointStyle;if(bZ.fillStyle==null&&bR!=null){bZ.fillStyle=bR.strokeStyle}if(bZ.outlineColor==null&&bR!=null){bZ.outlineColor=bR.outlineColor}if(bZ.outlineWidth==null&&bR!=null){bZ.outlineWidth=bR.outlineWidth}var bY=bQ.endpointHoverStyles[bV]||bQ.endpointHoverStyle||bn.Defaults.EndpointHoverStyles[bV]||p.Defaults.EndpointHoverStyles[bV]||bn.Defaults.EndpointHoverStyle||p.Defaults.EndpointHoverStyle;if(bU!=null){if(bY==null){bY={}}if(bY.fillStyle==null){bY.fillStyle=bU.strokeStyle}}var bX=bQ.anchors?bQ.anchors[bV]:bQ.anchor?bQ.anchor:bM(bn.Defaults.Anchors[bV],bT)||bM(p.Defaults.Anchors[bV],bT)||bM(bn.Defaults.Anchor,bT)||bM(p.Defaults.Anchor,bT),b0=bQ.uuids?bQ.uuids[bV]:null,bW=aF({paintStyle:bZ,hoverPaintStyle:bY,endpoint:b1,connections:[bG],uuid:b0,anchor:bX,source:bS,scope:bQ.scope,container:bQ.container,reattach:bQ.reattach,detachable:bQ.detachable});bG.endpoints[bV]=bW;if(bQ.drawEndpoints===false){bW.setVisible(false,true,true)}return bW}};var bI=bK(bN.sourceEndpoint,0,bN,bG.source,bG.sourceId,bN.paintStyle,bN.hoverPaintStyle);if(bI){V(aT,this.sourceId,bI)}var by=((bG.sourceId==bG.targetId)&&bN.targetEndpoint==null)?bI:bN.targetEndpoint,bH=bK(by,1,bN,bG.target,bG.targetId,bN.paintStyle,bN.hoverPaintStyle);if(bH){V(aT,this.targetId,bH)}if(!this.scope){this.scope=this.endpoints[0].scope}if(bN.deleteEndpointsOnDetach){bG.endpointsToDeleteOnDetach=[bI,bH]}var bw=bn.Defaults.ConnectionsDetachable;if(bN.detachable===false){bw=false}if(bG.endpoints[0].connectionsDetachable===false){bw=false}if(bG.endpoints[1].connectionsDetachable===false){bw=false}if(bD==null){bD=bG.endpoints[0].getConnectionCost()}if(bN.bidirectional==null){bB=bG.endpoints[0].areConnectionsBidirectional()}this.isDetachable=function(){return bw===true};this.setDetachable=function(bP){bw=bP===true};var bO=p.extend({},this.endpoints[0].getParameters());p.extend(bO,this.endpoints[1].getParameters());p.extend(bO,bG.getParameters());bG.setParameters(bO);var bE=bG.setHover;bG.setHover=function(bP){bG.connector.setHover.apply(bG.connector,arguments);bE.apply(bG,arguments)};var bL=function(bP){if(x==null){bG.setHover(bP,false)}};this.setConnector=function(bP,bQ){if(bG.connector!=null){aX(bG.connector.getDisplayElements(),bG.parent)}var bR={_jsPlumb:bG._jsPlumb,parent:bN.parent,cssClass:bN.cssClass,container:bN.container,tooltip:bG.tooltip};if(C(bP)){this.connector=new p.Connectors[X][bP](bR)}else{if(n(bP)){this.connector=new p.Connectors[X][bP[0]](p.extend(bP[1],bR))}}bG.canvas=bG.connector.canvas;G(bG.connector,bG,bL);if(!bQ){bG.repaint()}};bG.setConnector(this.endpoints[0].connector||this.endpoints[1].connector||bN.connector||bn.Defaults.Connector||p.Defaults.Connector,true);this.setPaintStyle(this.endpoints[0].connectorStyle||this.endpoints[1].connectorStyle||bN.paintStyle||bn.Defaults.PaintStyle||p.Defaults.PaintStyle,true);this.setHoverPaintStyle(this.endpoints[0].connectorHoverStyle||this.endpoints[1].connectorHoverStyle||bN.hoverPaintStyle||bn.Defaults.HoverPaintStyle||p.Defaults.HoverPaintStyle,true);this.paintStyleInUse=this.getPaintStyle();this.moveParent=function(bS){var bR=p.CurrentLibrary,bQ=bR.getParent(bG.connector.canvas);if(bG.connector.bgCanvas){bR.removeElement(bG.connector.bgCanvas,bQ);bR.appendElement(bG.connector.bgCanvas,bS)}bR.removeElement(bG.connector.canvas,bQ);bR.appendElement(bG.connector.canvas,bS);for(var bP=0;bP0){bO.connections[0].setHover(b2,false)}else{bO.setHover(b2)}};G(bO.endpoint,bO,b1);this.setPaintStyle(b0.paintStyle||b0.style||bn.Defaults.EndpointStyle||p.Defaults.EndpointStyle,true);this.setHoverPaintStyle(b0.hoverPaintStyle||bn.Defaults.EndpointHoverStyle||p.Defaults.EndpointHoverStyle,true);this.paintStyleInUse=this.getPaintStyle();var bJ=this.getPaintStyle();this.connectorStyle=b0.connectorStyle;this.connectorHoverStyle=b0.connectorHoverStyle;this.connectorOverlays=b0.connectorOverlays;this.connector=b0.connector;this.connectorTooltip=b0.connectorTooltip;this.isSource=b0.isSource||false;this.isTarget=b0.isTarget||false;var bU=b0.maxConnections||bn.Defaults.MaxConnections;this.getAttachedElements=function(){return bO.connections};this.canvas=this.endpoint.canvas;this.connections=b0.connections||[];this.scope=b0.scope||Q;this.timestamp=null;bO.isReattach=b0.reattach||false;bO.connectionsDetachable=bn.Defaults.ConnectionsDetachable;if(b0.connectionsDetachable===false||b0.detachable===false){bO.connectionsDetachable=false}var bI=b0.dragAllowedWhenFull||true;this.computeAnchor=function(b2){return bO.anchor.compute(b2)};this.addConnection=function(b2){bO.connections.push(b2)};this.detach=function(b3,b8,b4,cb,b2){var ca=i(bO.connections,function(cd){return cd.id==b3.id}),b9=false;cb=(cb!==false);if(ca>=0){if(b4||b3._forceDetach||b3.isDetachable()||b3.isDetachAllowed(b3)){var cc=b3.endpoints[0]==bO?b3.endpoints[1]:b3.endpoints[0];if(b4||b3._forceDetach||(bO.isDetachAllowed(b3))){bO.connections.splice(ca,1);if(!b8){cc.detach(b3,true,b4);if(b3.endpointsToDeleteOnDetach){for(var b7=0;b70){bO.detach(bO.connections[0],false,true,b3,b2)}};this.detachFrom=function(b5,b4,b2){var b6=[];for(var b3=0;b3=0){bO.connections.splice(b2,1)}};this.getElement=function(){return bN};this.setElement=function(b5,b2){var b7=K(b5);D(aT[bO.elementId],function(b8){return b8.id==bO.id});bN=F(b5);bF=K(bN);bO.elementId=bF;var b6=aw({source:b7,container:b2}),b4=bz.getParent(bO.canvas);bz.removeElement(bO.canvas,b4);bz.appendElement(bO.canvas,b6);for(var b3=0;b30){var ce=bK(b5.elementWithPrecedence),cg=ce.endpoints[0]==bO?1:0,b7=cg==0?ce.sourceId:ce.targetId,cd=ah[b7],cf=ae[b7];b4.txy=[cd.left,cd.top];b4.twh=cf;b4.tElement=ce.endpoints[cg]}b8=bO.anchor.compute(b4)}var cc=bL.compute(b8,bO.anchor.getOrientation(bO),bO.paintStyleInUse,b6||bO.paintStyleInUse);bL.paint(cc,bO.paintStyleInUse,bO.anchor);bO.timestamp=cb;for(var b9=0;b90?t:m+t:t*m;return jsPlumbUtil.pointOnLine({x:h,y:g},{x:d,y:c},s)}}};this.gradientAtPoint=function(s){return e};this.pointAlongPathFrom=function(s,w,v){var u=r.pointOnPath(s,v),t=s==1?{x:h+((d-h)*10),y:g+((g-c)*10)}:{x:d,y:c};return jsPlumbUtil.pointOnLine(u,t,w)}};jsPlumb.Connectors.Bezier=function(v){var p=this;v=v||{};this.majorAnchor=v.curviness||150;this.minorAnchor=10;var t=null;this.type="Bezier";this._findControlPoint=function(H,w,C,x,A,F,y){var E=F.getOrientation(x),G=y.getOrientation(A),B=E[0]!=G[0]||E[1]==G[1],z=[],I=p.majorAnchor,D=p.minorAnchor;if(!B){if(E[0]==0){z.push(w[0]u){u=C}if(F<0){s+=F;var H=Math.abs(F);u+=H;q[0]+=H;f+=H;o+=H;l[0]+=H}var P=Math.min(e,n),N=Math.min(q[1],l[1]),B=Math.min(P,N),G=Math.max(e,n),E=Math.max(q[1],l[1]),y=Math.max(G,E);if(y>d){d=y}if(B<0){r+=B;var D=Math.abs(B);d+=D;q[1]+=D;e+=D;n+=D;l[1]+=D}if(L&&u0?0:1,w)}return w};this.pointOnPath=function(w,y){var x=c();w=m(x,w,y);return jsBezier.pointOnCurve(x,w)};this.gradientAtPoint=function(w,y){var x=c();w=m(x,w,y);return jsBezier.gradientAtPoint(x,w)};this.pointAlongPathFrom=function(w,z,y){var x=c();w=m(x,w,y);return jsBezier.pointAlongCurveFrom(x,w,z)}};jsPlumb.Connectors.Flowchart=function(v){this.type="Flowchart";v=v||{};var n=this,c=v.stub||v.minStubLength||30,f=jsPlumbUtil.isArray(c)?c[0]:c,k=jsPlumbUtil.isArray(c)?c[1]:c,p=v.gap||0,q=[],i=0,d=[],m=[],r=[],o,l,u=-Infinity,s=-Infinity,w=Infinity,t=Infinity,x=function(z,y,D,C){var B=0;for(var A=0;A0?A/i:(i+A)/i}var y=d.length-1,z=1;for(var B=0;B=A){y=B;z=(A-d[B][0])/m[B];break}}return{segment:q[y],proportion:z,index:y}};this.compute=function(W,ak,z,Q,av,K,U,P,ap,am){q=[];d=[];i=0;m=[];u=s=-Infinity;w=t=Infinity;o=ak[0]au?0:1,ae=[1,0][ac];N=[];aw=[];N[ac]=W[ac]>ak[ac]?-1:1;aw[ac]=W[ac]>ak[ac]?1:-1;N[ae]=0;aw[ae]=0}if(al(f+k),X=Math.abs(H-aq)>(f+k),ah=Z+((L-Z)/2),af=Y+((J-Y)/2),O=((N[0]*aw[0])+(N[1]*aw[1])),ab=O==-1,ad=O==0,C=O==1;aj-=E;ai-=D;r=[aj,ai,al,au,I,H,ar,aq];var ao=[];var S=N[0]==0?"y":"x",M=ab?"opposite":C?"orthogonal":"perpendicular",F=jsPlumbUtil.segment([I,H],[ar,aq]),ag=N[S=="x"?0:1]==-1,R={x:[null,4,3,2,1],y:[null,2,1,4,3]};if(ag){F=R[S][F]}g(Z,Y,I,H,ar,aq);var T=function(az,ay,y,ax){return az+(ay*((1-y)*ax)+Math.max(f,k))},G={oppositex:function(){if(z.elementId==Q.elementId){var y=Y+((1-av.y)*ap.height)+Math.max(f,k);return[[Z,y],[L,y]]}else{if(V&&(F==1||F==2)){return[[ah,H],[ah,aq]]}else{return[[Z,af],[L,af]]}}},orthogonalx:function(){if(F==1||F==2){return[[L,Y]]}else{return[[Z,J]]}},perpendicularx:function(){var y=(aq+H)/2;if((F==1&&aw[1]==1)||(F==2&&aw[1]==-1)){if(Math.abs(ar-I)>Math.max(f,k)){return[[L,Y]]}else{return[[Z,Y],[Z,y],[L,y]]}}else{if((F==3&&aw[1]==-1)||(F==4&&aw[1]==1)){return[[Z,y],[L,y]]}else{if((F==3&&aw[1]==1)||(F==4&&aw[1]==-1)){return[[Z,J]]}else{if((F==1&&aw[1]==-1)||(F==2&&aw[1]==1)){if(Math.abs(ar-I)>Math.max(f,k)){return[[ah,Y],[ah,J]]}else{return[[Z,J]]}}}}}},oppositey:function(){if(z.elementId==Q.elementId){var y=Z+((1-av.x)*ap.width)+Math.max(f,k);return[[y,Y],[y,J]]}else{if(X&&(F==2||F==3)){return[[I,af],[ar,af]]}else{return[[ah,Y],[ah,J]]}}},orthogonaly:function(){if(F==2||F==3){return[[Z,J]]}else{return[[L,Y]]}},perpendiculary:function(){var y=(ar+I)/2;if((F==2&&aw[0]==-1)||(F==3&&aw[0]==1)){if(Math.abs(ar-I)>Math.max(f,k)){return[[Z,J]]}else{return[[Z,af],[L,af]]}}else{if((F==1&&aw[0]==-1)||(F==4&&aw[0]==1)){var y=(ar+I)/2;return[[y,Y],[y,J]]}else{if((F==1&&aw[0]==1)||(F==4&&aw[0]==-1)){return[[L,Y]]}else{if((F==2&&aw[0]==1)||(F==3&&aw[0]==-1)){if(Math.abs(aq-H)>Math.max(f,k)){return[[Z,af],[L,af]]}else{return[[L,Y]]}}}}}}};var an=G[M+S]();if(an){for(var at=0;atr[3]){r[3]=s+(U*2)}if(u>r[2]){r[2]=u+(U*2)}return r};this.pointOnPath=function(y,z){return n.pointAlongPathFrom(y,0,z)};this.gradientAtPoint=function(y,z){return q[e(y,z)["index"]][4]};this.pointAlongPathFrom=function(F,y,E){var G=e(F,E),C=G.segment,z=G.proportion,B=q[G.index][5],A=q[G.index][4];var D={x:A==Infinity?C[2]:C[2]>C[0]?C[0]+((1-z)*B)-y:C[2]+(z*B)+y,y:A==0?C[3]:C[3]>C[1]?C[1]+((1-z)*B)-y:C[3]+(z*B)+y,segmentInfo:G};return D}};jsPlumb.Endpoints.Dot=function(d){this.type="Dot";var c=this;d=d||{};this.radius=d.radius||10;this.defaultOffset=0.5*this.radius;this.defaultInnerRadius=this.radius/3;this.compute=function(i,f,l,h){var g=l.radius||c.radius,e=i[0]-g,k=i[1]-g;return[e,k,g*2,g*2,g]}};jsPlumb.Endpoints.Rectangle=function(d){this.type="Rectangle";var c=this;d=d||{};this.width=d.width||20;this.height=d.height||20;this.compute=function(k,g,m,i){var h=m.width||c.width,f=m.height||c.height,e=k[0]-(h/2),l=k[1]-(f/2);return[e,l,h,f]}};var a=function(e){jsPlumb.DOMElementComponent.apply(this,arguments);var c=this;var d=[];this.getDisplayElements=function(){return d};this.appendDisplayElement=function(f){d.push(f)}};jsPlumb.Endpoints.Image=function(g){this.type="Image";a.apply(this,arguments);var l=this,f=false,e=g.width,d=g.height,i=null,c=g.endpoint;this.img=new Image();l.ready=false;this.img.onload=function(){l.ready=true;e=e||l.img.width;d=d||l.img.height;if(i){i(l)}};c.setImage=function(m,o){var n=m.constructor==String?m:m.src;i=o;l.img.src=m;if(l.canvas!=null){l.canvas.setAttribute("src",m)}};c.setImage(g.src||g.url,g.onload);this.compute=function(o,m,p,n){l.anchorPoint=o;if(l.ready){return[o[0]-e/2,o[1]-d/2,e,d]}else{return[0,0,0,0]}};l.canvas=document.createElement("img"),f=false;l.canvas.style.margin=0;l.canvas.style.padding=0;l.canvas.style.outline=0;l.canvas.style.position="absolute";var h=g.cssClass?" "+g.cssClass:"";l.canvas.className=jsPlumb.endpointClass+h;if(e){l.canvas.setAttribute("width",e)}if(d){l.canvas.setAttribute("height",d)}jsPlumb.appendElement(l.canvas,g.parent);l.attachListeners(l.canvas,l);var k=function(p,o,n){if(!f){l.canvas.setAttribute("src",l.img.src);l.appendDisplayElement(l.canvas);f=true}var m=l.anchorPoint[0]-(e/2),q=l.anchorPoint[1]-(d/2);jsPlumb.sizeCanvas(l.canvas,m,q,e,d)};this.paint=function(o,n,m){if(l.ready){k(o,n,m)}else{window.setTimeout(function(){l.paint(o,n,m)},200)}}};jsPlumb.Endpoints.Blank=function(d){var c=this;this.type="Blank";a.apply(this,arguments);this.compute=function(g,e,h,f){return[g[0],g[1],10,0]};c.canvas=document.createElement("div");c.canvas.style.display="block";c.canvas.style.width="1px";c.canvas.style.height="1px";c.canvas.style.background="transparent";c.canvas.style.position="absolute";c.canvas.className=c._jsPlumb.endpointClass;jsPlumb.appendElement(c.canvas,d.parent);this.paint=function(g,f,e){jsPlumb.sizeCanvas(c.canvas,g[0],g[1],g[2],g[3])}};jsPlumb.Endpoints.Triangle=function(c){this.type="Triangle";c=c||{};c.width=c.width||55;c.height=c.height||55;this.width=c.width;this.height=c.height;this.compute=function(i,f,l,h){var g=l.width||self.width,e=l.height||self.height,d=i[0]-(g/2),k=i[1]-(e/2);return[d,k,g,e]}};var b=function(e){var d=true,c=this;this.isAppendedAtTopLevel=true;this.component=e.component;this.loc=e.location==null?0.5:e.location;this.endpointLoc=e.endpointLocation==null?[0.5,0.5]:e.endpointLocation;this.setVisible=function(f){d=f;c.component.repaint()};this.isVisible=function(){return d};this.hide=function(){c.setVisible(false)};this.show=function(){c.setVisible(true)};this.incrementLocation=function(f){c.loc+=f;c.component.repaint()};this.setLocation=function(f){c.loc=f;c.component.repaint()};this.getLocation=function(){return c.loc}};jsPlumb.Overlays.Arrow=function(g){this.type="Arrow";b.apply(this,arguments);this.isAppendedAtTopLevel=false;g=g||{};var d=this;this.length=g.length||20;this.width=g.width||20;this.id=g.id;var f=(g.direction||1)<0?-1:1,e=g.paintStyle||{lineWidth:1},c=g.foldback||0.623;this.computeMaxSize=function(){return d.width*1.5};this.cleanup=function(){};this.draw=function(k,z,u){var o,v,h,p,n;if(k.pointAlongPathFrom){if(jsPlumbUtil.isString(d.loc)||d.loc>1||d.loc<0){var i=parseInt(d.loc);o=k.pointAlongPathFrom(i,f*d.length/2,true),v=k.pointOnPath(i,true),h=jsPlumbUtil.pointOnLine(o,v,d.length)}else{if(d.loc==1){o=k.pointOnPath(d.loc);v=k.pointAlongPathFrom(d.loc,-1);h=jsPlumbUtil.pointOnLine(o,v,d.length)}else{if(d.loc==0){h=k.pointOnPath(d.loc);v=k.pointAlongPathFrom(d.loc,1);o=jsPlumbUtil.pointOnLine(h,v,d.length)}else{o=k.pointAlongPathFrom(d.loc,f*d.length/2),v=k.pointOnPath(d.loc),h=jsPlumbUtil.pointOnLine(o,v,d.length)}}}p=jsPlumbUtil.perpendicularLineTo(o,h,d.width);n=jsPlumbUtil.pointOnLine(o,h,c*d.length);var y=Math.min(o.x,p[0].x,p[1].x),s=Math.max(o.x,p[0].x,p[1].x),x=Math.min(o.y,p[0].y,p[1].y),r=Math.max(o.y,p[0].y,p[1].y);var q={hxy:o,tail:p,cxy:n},t=e.strokeStyle||z.strokeStyle,w=e.fillStyle||z.strokeStyle,m=e.lineWidth||z.lineWidth;d.paint(k,q,m,t,w,u);return[y,s,x,r]}else{return[0,0,0,0]}}};jsPlumb.Overlays.PlainArrow=function(d){d=d||{};var c=jsPlumb.extend(d,{foldback:1});jsPlumb.Overlays.Arrow.call(this,c);this.type="PlainArrow"};jsPlumb.Overlays.Diamond=function(e){e=e||{};var c=e.length||40,d=jsPlumb.extend(e,{length:c/2,foldback:2});jsPlumb.Overlays.Arrow.call(this,d);this.type="Diamond"};jsPlumb.Overlays.Label=function(i){this.type="Label";jsPlumb.DOMElementComponent.apply(this,arguments);b.apply(this,arguments);this.labelStyle=i.labelStyle||jsPlumb.Defaults.LabelStyle;this.id=i.id;this.cachedDimensions=null;var e=i.label||"",c=this,f=false,k=document.createElement("div"),g=null;k.style.position="absolute";var d=i._jsPlumb.overlayClass+" "+(c.labelStyle.cssClass?c.labelStyle.cssClass:i.cssClass?i.cssClass:"");k.className=d;jsPlumb.appendElement(k,i.component.parent);jsPlumb.getId(k);c.attachListeners(k,c);c.canvas=k;var h=c.setVisible;c.setVisible=function(l){h(l);k.style.display=l?"block":"none"};this.getElement=function(){return k};this.cleanup=function(){if(k!=null){jsPlumb.CurrentLibrary.removeElement(k)}};this.setLabel=function(m){e=m;g=null;c.component.repaint()};this.getLabel=function(){return e};this.paint=function(l,n,m){if(!f){l.appendDisplayElement(k);c.attachListeners(k,l);f=true}k.style.left=(m[0]+n.minx)+"px";k.style.top=(m[1]+n.miny)+"px"};this.getTextDimensions=function(){if(typeof e=="function"){var l=e(c);k.innerHTML=l.replace(/\r\n/g,"
    ")}else{if(g==null){g=e;k.innerHTML=g.replace(/\r\n/g,"
    ")}}var n=jsPlumb.CurrentLibrary.getElementObject(k),m=jsPlumb.CurrentLibrary.getSize(n);return{width:m[0],height:m[1]}};this.computeMaxSize=function(l){var m=c.getTextDimensions(l);return m.width?Math.max(m.width,m.height)*1.5:0};this.draw=function(m,n,o){var s=c.getTextDimensions(m);if(s.width!=null){var p={x:0,y:0};if(m.pointOnPath){var q=c.loc,r=false;if(jsPlumbUtil.isString(c.loc)||c.loc<0||c.loc>1){q=parseInt(c.loc);r=true}p=m.pointOnPath(q,r)}else{var l=c.loc.constructor==Array?c.loc:c.endpointLoc;p={x:l[0]*o[2],y:l[1]*o[3]}}minx=p.x-(s.width/2),miny=p.y-(s.height/2);c.paint(m,{minx:minx,miny:miny,td:s,cxy:p},o);return[minx,minx+s.width,miny,miny+s.height]}else{return[0,0,0,0]}};this.reattachListeners=function(l){if(k){c.reattachListenersForElement(k,c,l)}}};jsPlumb.Overlays.GuideLines=function(){var c=this;c.length=50;c.lineWidth=5;this.type="GuideLines";b.apply(this,arguments);jsPlumb.jsPlumbUIComponent.apply(this,arguments);this.draw=function(e,l,k){var i=e.pointAlongPathFrom(c.loc,c.length/2),h=e.pointOnPath(c.loc),g=jsPlumbUtil.pointOnLine(i,h,c.length),f=jsPlumbUtil.perpendicularLineTo(i,g,40),d=jsPlumbUtil.perpendicularLineTo(g,i,20);c.paint(e,[i,g,f,d],c.lineWidth,"red",null,k);return[Math.min(i.x,g.x),Math.min(i.y,g.y),Math.max(i.x,g.x),Math.max(i.y,g.y)]};this.computeMaxSize=function(){return 50};this.cleanup=function(){}}})();(function(){var c=function(e,g,d,f){this.m=(f-g)/(d-e);this.b=-1*((this.m*e)-g);this.rectIntersect=function(q,p,s,o){var n=[];var k=(p-this.b)/this.m;if(k>=q&&k<=(q+s)){n.push([k,(this.m*k)+this.b])}var t=(this.m*(q+s))+this.b;if(t>=p&&t<=(p+o)){n.push([(t-this.b)/this.m,t])}var k=((p+o)-this.b)/this.m;if(k>=q&&k<=(q+s)){n.push([k,(this.m*k)+this.b])}var t=(this.m*q)+this.b;if(t>=p&&t<=(p+o)){n.push([(t-this.b)/this.m,t])}if(n.length==2){var m=(n[0][0]+n[1][0])/2,l=(n[0][1]+n[1][1])/2;n.push([m,l]);var i=m<=q+(s/2)?-1:1,r=l<=p+(o/2)?-1:1;n.push([i,r]);return n}return null}},a=function(e,g,d,f){if(e<=d&&f<=g){return 1}else{if(e<=d&&g<=f){return 2}else{if(d<=e&&f>=g){return 3}}}return 4},b=function(g,f,i,e,h,m,l,d,k){if(d<=k){return[g,f]}if(i==1){if(e[3]<=0&&h[3]>=1){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]>=1&&h[2]<=0){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(-1*m),f+(-1*l)]}}}else{if(i==2){if(e[3]>=1&&h[3]<=0){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]>=1&&h[2]<=0){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(1*m),f+(-1*l)]}}}else{if(i==3){if(e[3]>=1&&h[3]<=0){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]<=0&&h[2]>=1){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(-1*m),f+(-1*l)]}}}else{if(i==4){if(e[3]<=0&&h[3]>=1){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]<=0&&h[2]>=1){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(1*m),f+(-1*l)]}}}}}}};jsPlumb.Connectors.StateMachine=function(l){var u=this,n=null,o,m,g,e,p=[],d=l.curviness||10,k=l.margin||5,q=l.proximityLimit||80,f=l.orientation&&l.orientation=="clockwise",i=l.loopbackRadius||25,h=false,t=l.showLoopback!==false;this.type="StateMachine";l=l||{};this.compute=function(ad,H,W,I,ac,z,v,U){var Q=Math.abs(ad[0]-H[0]),Y=Math.abs(ad[1]-H[1]),S=0.45*Q,ab=0.45*Y;Q*=1.9;Y*=1.9;v=v||1;var O=Math.min(ad[0],H[0])-S,M=Math.min(ad[1],H[1])-ab;if(!t||(W.elementId!=I.elementId)){h=false;o=ad[0]0?0:1,v)}return v};this.pointOnPath=function(x,B){if(h){if(B){var y=Math.PI*2*i;x=x/y}if(x>0&&x<1){x=1-x}var z=(x*2*Math.PI)+(Math.PI/2),w=n[4]+(n[6]*Math.cos(z)),v=n[5]+(n[6]*Math.sin(z));return{x:w,y:v}}else{var A=r();x=s(A,x,B);return jsBezier.pointOnCurve(A,x)}};this.gradientAtPoint=function(v,y){if(h){if(y){var w=Math.PI*2*i;v=v/w}return Math.atan(v*2*Math.PI)}else{var x=r();v=s(x,v,y);return jsBezier.gradientAtPoint(x,v)}};this.pointAlongPathFrom=function(D,v,C){if(h){if(C){var B=Math.PI*2*i;D=D/B}if(D>0&&D<1){D=1-D}var B=2*Math.PI*n[6],w=v/B*2*Math.PI,z=(D*2*Math.PI)-w+(Math.PI/2),y=n[4]+(n[6]*Math.cos(z)),x=n[5]+(n[6]*Math.sin(z));return{x:y,y:x}}else{var A=r();D=s(A,D,C);return jsBezier.pointAlongCurveFrom(A,D,v)}}};jsPlumb.Connectors.canvas.StateMachine=function(f){f=f||{};var d=this,g=f.drawGuideline||true,e=f.avoidSelector;jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.CanvasConnector.apply(this,arguments);this._paint=function(l){if(l.length==10){d.ctx.beginPath();d.ctx.moveTo(l[4],l[5]);d.ctx.bezierCurveTo(l[8],l[9],l[8],l[9],l[6],l[7]);d.ctx.stroke()}else{d.ctx.save();d.ctx.beginPath();var k=0,i=2*Math.PI,h=l[7];d.ctx.arc(l[4],l[5],l[6],0,i,h);d.ctx.stroke();d.ctx.closePath();d.ctx.restore()}};this.createGradient=function(i,h){return h.createLinearGradient(i[4],i[5],i[6],i[7])}};jsPlumb.Connectors.svg.StateMachine=function(){var d=this;jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.SvgConnector.apply(this,arguments);this.getPath=function(e){if(e.length==10){return"M "+e[4]+" "+e[5]+" C "+e[8]+" "+e[9]+" "+e[8]+" "+e[9]+" "+e[6]+" "+e[7]}else{return"M"+(e[8]+4)+" "+e[9]+" A "+e[6]+" "+e[6]+" 0 1,0 "+(e[8]-4)+" "+e[9]}}};jsPlumb.Connectors.vml.StateMachine=function(){jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.VmlConnector.apply(this,arguments);var d=jsPlumb.vml.convertValue;this.getPath=function(k){if(k.length==10){return"m"+d(k[4])+","+d(k[5])+" c"+d(k[8])+","+d(k[9])+","+d(k[8])+","+d(k[9])+","+d(k[6])+","+d(k[7])+" e"}else{var h=d(k[8]-k[6]),g=d(k[9]-(2*k[6])),f=h+d(2*k[6]),e=g+d(2*k[6]),l=h+","+g+","+f+","+e;var i="ar "+l+","+d(k[8])+","+d(k[9])+","+d(k[8])+","+d(k[9])+" e";return i}}}})();(function(){var h={"stroke-linejoin":"joinstyle",joinstyle:"joinstyle",endcap:"endcap",miterlimit:"miterlimit"},c=null;if(document.createStyleSheet&&document.namespaces){var m=[".jsplumb_vml","jsplumb\\:textbox","jsplumb\\:oval","jsplumb\\:rect","jsplumb\\:stroke","jsplumb\\:shape","jsplumb\\:group"],g="behavior:url(#default#VML);position:absolute;";c=document.createStyleSheet();for(var r=0;r0&&C>0&&u=u&&w[2]<=C&&w[3]>=C)){return true}}var A=q.canvas.getContext("2d").getImageData(parseInt(u),parseInt(C),1,1);return A.data[0]!=0||A.data[1]!=0||A.data[2]!=0||A.data[3]!=0}return false};var p=false,o=false,t=null,s=false,r=function(v,u){return v!=null&&i(v,u)};this.mousemove=function(x){var z=n(x),w=f(x),v=document.elementFromPoint(w[0],w[1]),y=r(v,"_jsPlumb_overlay");var u=d==null&&(r(v,"_jsPlumb_endpoint")||r(v,"_jsPlumb_connector"));if(!p&&u&&q._over(x)){p=true;q.fire("mouseenter",q,x);return true}else{if(p&&(!q._over(x)||!u)&&!y){p=false;q.fire("mouseexit",q,x)}}q.fire("mousemove",q,x)};this.click=function(u){if(p&&q._over(u)&&!s){q.fire("click",q,u)}s=false};this.dblclick=function(u){if(p&&q._over(u)&&!s){q.fire("dblclick",q,u)}s=false};this.mousedown=function(u){if(q._over(u)&&!o){o=true;t=m(a(q.canvas));q.fire("mousedown",q,u)}};this.mouseup=function(u){o=false;q.fire("mouseup",q,u)};this.contextmenu=function(u){if(p&&q._over(u)&&!s){q.fire("contextmenu",q,u)}s=false}};var c=function(p){var o=document.createElement("canvas");p._jsPlumb.appendElement(o,p.parent);o.style.position="absolute";if(p["class"]){o.className=p["class"]}p._jsPlumb.getId(o,p.uuid);if(p.tooltip){o.setAttribute("title",p.tooltip)}return o};var l=function(p){k.apply(this,arguments);var o=[];this.getDisplayElements=function(){return o};this.appendDisplayElement=function(q){o.push(q)}};var h=jsPlumb.CanvasConnector=function(r){l.apply(this,arguments);var o=function(v,t){p.ctx.save();jsPlumb.extend(p.ctx,t);if(t.gradient){var u=p.createGradient(v,p.ctx);for(var s=0;s0?c[0].tagName:null},getUIPosition:function(c){if(c.length==1){ret={left:c[0].pageX,top:c[0].pageY}}else{var d=c[1],b=d.offset;ret=b||d.absolutePosition}return ret},hasClass:function(c,b){return c.hasClass(b)},initDraggable:function(c,b,d){b=b||{};b.helper=null;if(d){b.scope=b.scope||jsPlumb.Defaults.Scope}c.draggable(b)},initDroppable:function(c,b){b.scope=b.scope||jsPlumb.Defaults.Scope;c.droppable(b)},isAlreadyDraggable:function(b){b=jsPlumb.CurrentLibrary.getElementObject(b);return b.hasClass("ui-draggable")},isDragSupported:function(c,b){return c.draggable},isDropSupported:function(c,b){return c.droppable},removeClass:function(c,b){c=jsPlumb.CurrentLibrary.getElementObject(c);try{if(c[0].className.constructor==SVGAnimatedString){jsPlumb.util.svg.removeClass(c[0],b)}}catch(d){}c.removeClass(b)},removeElement:function(b,c){jsPlumb.CurrentLibrary.getElementObject(b).remove()},setAttribute:function(c,d,b){c.attr(d,b)},setDraggable:function(c,b){c.draggable("option","disabled",!b)},setDragScope:function(c,b){c.draggable("option","scope",b)},setOffset:function(b,c){jsPlumb.CurrentLibrary.getElementObject(b).offset(c)},trigger:function(d,e,b){var c=jQuery._data(jsPlumb.CurrentLibrary.getElementObject(d)[0],"handle");c(b)},unbind:function(b,c,d){b=jsPlumb.CurrentLibrary.getElementObject(b);b.unbind(c,d)}};a(document).ready(jsPlumb.init)})(jQuery);(function(){"undefined"==typeof Math.sgn&&(Math.sgn=function(l){return 0==l?0:0=64){x[0]=(C[0].x+C[B].x)/2;return 1}var p,u=C[0].y-C[B].y;y=C[B].x-C[0].x;q=C[0].x*C[B].y-C[B].x*C[0].y;s=max_distance_below=0;for(p=1;ps?s=r:r0?1:-1,r=null;n1){l.location=1}if(l.location<0){l.location=0}return i(m,l.location)},nearestPointOnCurve:function(m,l){var n=h(m,l);return{point:k(l,l.length-1,n.location,null,null),location:n.location}},pointOnCurve:c,pointAlongCurveFrom:function(m,l,n){return b(m,l,n).point},perpendicularToCurveAt:function(m,l,n,o){l=b(m,l,o==null?0:o);m=i(m,l.location);o=Math.atan(-1/m);m=n/2*Math.sin(o);n=n/2*Math.cos(o);return[{x:l.point.x+n,y:l.point.y+m},{x:l.point.x-n,y:l.point.y-m}]},locationAlongCurveFrom:function(m,l,n){return b(m,l,n).location}}})(); \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.15-all-min.js b/book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.15-all-min.js new file mode 100644 index 0000000..3abdf47 --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery.jsPlumb-1.3.15-all-min.js @@ -0,0 +1 @@ +jsPlumbUtil={isArray:function(b){return Object.prototype.toString.call(b)==="[object Array]"},isString:function(a){return typeof a==="string"},isBoolean:function(a){return typeof a==="boolean"},isObject:function(a){return Object.prototype.toString.call(a)==="[object Object]"},isDate:function(a){return Object.prototype.toString.call(a)==="[object Date]"},isFunction:function(a){return Object.prototype.toString.call(a)==="[object Function]"},clone:function(d){if(this.isString(d)){return new String(d)}else{if(this.isBoolean(d)){return new Boolean(d)}else{if(this.isDate(d)){return new Date(d.getTime())}else{if(this.isFunction(d)){return d}else{if(this.isArray(d)){var c=[];for(var e=0;eb[0]){return(a[1]>b[1])?2:1}else{return(a[1]>b[1])?3:4}},intersects:function(f,e){var c=f.x,a=f.x+f.w,k=f.y,h=f.y+f.h,d=e.x,b=e.x+e.w,i=e.y,g=e.y+e.h;return((c<=d&&d<=a)&&(k<=i&&i<=h))||((c<=b&&b<=a)&&(k<=i&&i<=h))||((c<=d&&d<=a)&&(k<=g&&g<=h))||((c<=b&&d<=a)&&(k<=g&&g<=h))||((d<=c&&c<=b)&&(i<=k&&k<=g))||((d<=a&&a<=b)&&(i<=k&&k<=g))||((d<=c&&c<=b)&&(i<=h&&h<=g))||((d<=a&&c<=b)&&(i<=h&&h<=g))},segmentMultipliers:[null,[1,-1],[1,1],[-1,1],[-1,-1]],inverseSegmentMultipliers:[null,[-1,-1],[-1,1],[1,1],[1,-1]],pointOnLine:function(a,e,b){var d=jsPlumbUtil.gradient(a,e),i=jsPlumbUtil.segment(a,e),h=b>0?jsPlumbUtil.segmentMultipliers[i]:jsPlumbUtil.inverseSegmentMultipliers[i],c=Math.atan(d),f=Math.abs(b*Math.sin(c))*h[1],g=Math.abs(b*Math.cos(c))*h[0];return{x:a.x+g,y:a.y+f}},perpendicularLineTo:function(c,d,e){var b=jsPlumbUtil.gradient(c,d),f=Math.atan(-1/b),g=e/2*Math.sin(f),a=e/2*Math.cos(f);return[{x:d.x+a,y:d.y+g},{x:d.x-a,y:d.y-g}]},findWithFunction:function(b,d){if(b){for(var c=0;c-1){c.splice(b,1)}return b!=-1},remove:function(b,c){var a=jsPlumbUtil.indexOf(b,c);if(a>-1){b.splice(a,1)}return a!=-1},addWithFunction:function(c,b,a){if(jsPlumbUtil.findWithFunction(c,a)==-1){c.push(b)}},addToList:function(d,b,c){var a=d[b];if(a==null){a=[],d[b]=a}a.push(c);return a},EventGenerator:function(){var c={},b=this;var a=["ready"];this.bind=function(d,e){jsPlumbUtil.addToList(c,d,e);return b};this.fire=function(g,h,d){if(c[g]){for(var f=0;f';var e=f.firstChild;e.style.behavior="url(#default#VML)";d.vml=e?typeof e.adj=="object":true;f.parentNode.removeChild(f)}return d.vml};var c=function(i){var h={},g=[],f={},e={};this.register=function(n){var m=jsPlumb.CurrentLibrary;n=m.getElementObject(n);var p=i.getId(n),l=m.getDOMElement(n),k=m.getOffset(n);if(!h[p]){h[p]=n;g.push(n);f[p]={}}var o=function(u,q){if(u){for(var r=0;r0){var s=m.getOffset(t);f[p][v]={id:v,offset:{left:s.left-k.left,top:s.top-k.top}}}o(u.childNodes[r])}}}};o(l)};this.endpointAdded=function(m){var r=jsPlumb.CurrentLibrary,u=document.body,k=i.getId(m),t=r.getDOMElement(m),l=t.parentNode,o=l==u;e[k]=e[k]?e[k]+1:1;while(l!=u){var q=i.getId(l,null,true);if(q&&h[q]){var w=-1,s=r.getElementObject(l),n=r.getOffset(s);if(f[q][k]==null){var v=jsPlumb.CurrentLibrary.getOffset(m);f[q][k]={id:k,offset:{left:v.left-n.left,top:v.top-n.top}}}break}l=l.parentNode}};this.endpointDeleted=function(l){if(e[l.elementId]){e[l.elementId]--;if(e[l.elementId]<=0){for(var k in f){delete f[k][l.elementId]}}}};this.getElementsForDraggable=function(k){return f[k]};this.reset=function(){h={};g=[];f={};e={}}};if(!window.console){window.console={time:function(){},timeEnd:function(){},group:function(){},groupEnd:function(){},log:function(){}}}window.jsPlumbAdapter={headless:false,appendToRoot:function(e){document.body.appendChild(e)},getRenderModes:function(){return["canvas","svg","vml"]},isRenderModeAvailable:function(e){return{canvas:b,svg:a,vml:d()}[e]},getDragManager:function(e){return new c(e)},setRenderMode:function(i){var h;if(i){i=i.toLowerCase();var f=this.isRenderModeAvailable("canvas"),e=this.isRenderModeAvailable("svg"),g=this.isRenderModeAvailable("vml");if(i==="svg"){if(e){h="svg"}else{if(f){h="canvas"}else{if(g){h="vml"}}}}else{if(i==="canvas"&&f){h="canvas"}else{if(g){h="vml"}}}}return h}}})();(function(){var g=jsPlumbUtil.findWithFunction,G=jsPlumbUtil.indexOf,A=jsPlumbUtil.removeWithFunction,k=jsPlumbUtil.remove,r=jsPlumbUtil.addWithFunction,i=jsPlumbUtil.addToList,l=jsPlumbUtil.isArray,z=jsPlumbUtil.isString,u=jsPlumbUtil.isObject;var v=null,c=function(H,I){return n.CurrentLibrary.getAttribute(C(H),I)},d=function(I,J,H){n.CurrentLibrary.setAttribute(C(I),J,H)},y=function(I,H){n.CurrentLibrary.addClass(C(I),H)},h=function(I,H){return n.CurrentLibrary.hasClass(C(I),H)},m=function(I,H){n.CurrentLibrary.removeClass(C(I),H)},C=function(H){return n.CurrentLibrary.getElementObject(H)},s=function(I,H){var K=n.CurrentLibrary.getOffset(C(I));if(H!=null){var J=H.getZoom();return{left:K.left/J,top:K.top/J}}else{return K}},a=function(H){return n.CurrentLibrary.getSize(C(H))},o=jsPlumbUtil.log,F=jsPlumbUtil.group,f=jsPlumbUtil.groupEnd,E=jsPlumbUtil.time,t=jsPlumbUtil.timeEnd,p=function(){return""+(new Date()).getTime()},B=function(aa){var U=this,ab=arguments,S=false,M=aa.parameters||{},K=U.idPrefix,X=K+(new Date()).getTime(),W=null,ac=null;U._jsPlumb=aa._jsPlumb;U.getId=function(){return X};U.tooltip=aa.tooltip;U.hoverClass=aa.hoverClass||U._jsPlumb.Defaults.HoverClass||n.Defaults.HoverClass;jsPlumbUtil.EventGenerator.apply(this);this.clone=function(){var ad=new Object();U.constructor.apply(ad,ab);return ad};this.getParameter=function(ad){return M[ad]},this.getParameters=function(){return M},this.setParameter=function(ad,ae){M[ad]=ae},this.setParameters=function(ad){M=ad},this.overlayPlacements=[];var L=aa.beforeDetach;this.isDetachAllowed=function(ad){var ae=U._jsPlumb.checkCondition("beforeDetach",ad);if(L){try{ae=L(ad)}catch(af){o("jsPlumb: beforeDetach callback failed",af)}}return ae};var O=aa.beforeDrop;this.isDropAllowed=function(ai,af,ag,ad,ae){var ah=U._jsPlumb.checkCondition("beforeDrop",{sourceId:ai,targetId:af,scope:ag,connection:ad,dropEndpoint:ae});if(O){try{ah=O({sourceId:ai,targetId:af,scope:ag,connection:ad,dropEndpoint:ae})}catch(aj){o("jsPlumb: beforeDrop callback failed",aj)}}return ah};var Y=function(){if(W&&ac){var ad={};n.extend(ad,W);n.extend(ad,ac);delete U.hoverPaintStyle;if(ad.gradient&&W.fillStyle){delete ad.gradient}ac=ad}};this.setPaintStyle=function(ad,ae){W=ad;U.paintStyleInUse=W;Y();if(!ae){U.repaint()}};this.getPaintStyle=function(){return W};this.setHoverPaintStyle=function(ad,ae){ac=ad;Y();if(!ae){U.repaint()}};this.getHoverPaintStyle=function(){return ac};this.setHover=function(ad,af,ae){if(!U._jsPlumb.currentlyDragging&&!U._jsPlumb.isHoverSuspended()){S=ad;if(U.hoverClass!=null&&U.canvas!=null){if(ad){J.addClass(U.canvas,U.hoverClass)}else{J.removeClass(U.canvas,U.hoverClass)}}if(ac!=null){U.paintStyleInUse=ad?ac:W;ae=ae||p();U.repaint({timestamp:ae,recalc:false})}if(U.getAttachedElements&&!af){Z(ad,p(),U)}}};this.isHover=function(){return S};var V=null;this.setZIndex=function(ad){V=ad};this.getZIndex=function(){return V};var J=n.CurrentLibrary,I=["click","dblclick","mouseenter","mouseout","mousemove","mousedown","mouseup","contextmenu"],T={mouseout:"mouseexit"},N=function(af,ag,ae){var ad=T[ae]||ae;J.bind(af,ae,function(ah){ag.fire(ad,ag,ah)})},R=function(af,ae){var ad=T[ae]||ae;J.unbind(af,ae)};this.attachListeners=function(ae,af){for(var ad=0;ad1){for(var ad=0;ad=0?S.overlays[T]:null};this.getOverlays=function(){return S.overlays};this.hideOverlay=function(U){var T=S.getOverlay(U);if(T){T.hide()}};this.hideOverlays=function(){for(var T=0;T0){try{for(var bA=0;bA0?G(bB,bA)!=-1:!bz};this.getConnections=function(bI,bA){if(!bI){bI={}}else{if(bI.constructor==String){bI={scope:bI}}}var bH=bI.scope||br.getDefaultScope(),bG=bv(bH,true),bz=bv(bI.source),bE=bv(bI.target),bD=(!bA&&bG.length>1)?{}:[],bJ=function(bL,bM){if(!bA&&bG.length>1){var bK=bD[bL];if(bK==null){bK=[];bD[bL]=bK}bK.push(bM)}else{bD.push(bM)}};for(var bC in a0){if(aI(bG,bC)){for(var bB=0;bB0&&!bL.isSource),bG=(bC&&bJ.length>0&&!bL.isTarget);if(bN||bG){continue inner}bP.push(bL)}}}}return bf(bP)};this.getAllConnections=function(){return a0};this.getDefaultScope=function(){return R};this.getEndpoint=ax;this.getEndpoints=function(bz){return aV[H(bz)]};this.getId=H;this.getOffset=function(bA){var bz=aj[bA];return X({elId:bA})};this.getSelector=function(bz){return n.CurrentLibrary.getSelector(bz)};this.getSize=function(bA){var bz=ag[bA];if(!bz){X({elId:bA})}return ag[bA]};this.appendElement=aX;var aU=false;this.isHoverSuspended=function(){return aU};this.setHoverSuspended=function(bz){aU=bz};var aY=function(bz){return function(){return jsPlumbAdapter.isRenderModeAvailable(bz)}};this.isCanvasAvailable=aY("canvas");this.isSVGAvailable=aY("svg");this.isVMLAvailable=aY("vml");this.hide=function(bz,bA){a7(bz,"none",bA)};this.idstamp=an;this.init=function(){if(!K){br.setRenderMode(br.Defaults.RenderMode);var bz=function(bA){n.CurrentLibrary.bind(document,bA,function(bG){if(!br.currentlyDragging&&Y==n.CANVAS){for(var bF in a0){var bH=a0[bF];for(var bD=0;bD=4)?[bE[2],bE[3]]:[0,0],offsets:(bE.length==6)?[bE[4],bE[5]]:[0,0],elementId:bB};bC=new ab(bD);bC.clone=function(){return new ab(bD)}}}}}if(!bC.id){bC.id="anchor_"+an()}return bC};this.makeAnchors=function(bC,bA,bz){var bD=[];for(var bB=0;bB0&&bT>=at[bM]){if(bz){bz({element:bO,connection:bY},bR)}return false}bQ.anchor.locked=false;if(b1){bH.setDragScope(b3,b1)}var bW=proxyComponent.isDropAllowed(bY.sourceId,H(bO),bY.scope,bY,null);if(bY.endpointsToDeleteOnDetach){if(bQ===bY.endpointsToDeleteOnDetach[0]){bY.endpointsToDeleteOnDetach[0]=null}else{if(bQ===bY.endpointsToDeleteOnDetach[1]){bY.endpointsToDeleteOnDetach[1]=null}}}if(bY.suspendedEndpoint){bY.targetId=bY.suspendedEndpoint.elementId;bY.target=bH.getElementObject(bY.suspendedEndpoint.elementId);bY.endpoints[1]=bY.suspendedEndpoint}if(bW){bQ.detach(bY,false,true,false);var b2=aK[bM]||br.addEndpoint(bO,bA);if(bA.uniqueEndpoint){aK[bM]=b2}b2._makeTargetCreator=true;if(b2.anchor.positionFinder!=null){var bZ=bH.getUIPosition(arguments,br.getZoom()),bV=s(bO,br),b0=a(bO),bU=b2.anchor.positionFinder(bZ,bV,b0,b2.anchor.constructorParams);b2.anchor.x=bU[0];b2.anchor.y=bU[1]}var bX=br.connect({source:bQ,target:b2,scope:b1,previousConnection:bY,container:bY.parent,deleteEndpointsOnDetach:bE,doNotFireConnectionEvent:bQ.endpointWillMoveAfterConnection});if(bY.endpoints[1]._makeTargetCreator&&bY.endpoints[1].connections.length<2){br.deleteEndpoint(bY.endpoints[1])}if(bE){bX.endpointsToDeleteOnDetach=[bQ,b2]}bX.repaint()}else{if(bY.suspendedEndpoint){if(bY.isReattach()){bY.setHover(false);bY.floatingAnchorIndex=null;bY.suspendedEndpoint.addConnection(bY);br.repaint(bQ.elementId)}else{bQ.detach(bY,false,true,true,bR)}}}};var bN=bH.dragEvents.drop;bL.scope=bL.scope||bI;bL[bN]=ap(bL[bN],bK);bH.initDroppable(bO,bL,true)};bC=aL(bC);var bG=bC.length&&bC.constructor!=String?bC:[bC];for(var bF=0;bF=0&&bX>=N[bJ]){if(bA){bA({element:bQ,maxConnections:bC},bZ)}return false}if(bE.filter){var bV=bE.filter(bH.getOriginalEvent(bZ),bQ);if(bV===false){return}}var b3=X({elId:bK});var b2=((bZ.pageX||bZ.page.x)-b3.left)/b3.width,b1=((bZ.pageY||bZ.page.y)-b3.top)/b3.height,b7=b2,b6=b1;if(bB.parent){var b0=bH.getElementObject(bB.parent),bY=H(b0);b3=X({elId:bY});b7=((bZ.pageX||bZ.page.x)-b3.left)/b3.width,b6=((bZ.pageY||bZ.page.y)-b3.top)/b3.height}var b5={};n.extend(b5,bB);b5.isSource=true;b5.anchor=[b2,b1,0,0];b5.parentAnchor=[b7,b6,0,0];b5.dragOptions=bS;if(bB.parent){var bW=b5.container||br.Defaults.Container||n.Defaults.Container;if(bW){b5.container=bW}else{b5.container=n.CurrentLibrary.getParent(bB.parent)}}bU=br.addEndpoint(bK,b5);bO=true;bU.endpointWillMoveAfterConnection=bB.parent!=null;bU.endpointWillMoveTo=bB.parent?bH.getElementObject(bB.parent):null;var b4=function(){if(bO){br.deleteEndpoint(bU)}};br.registerListener(bU.canvas,"mouseup",b4);br.registerListener(bQ,"mouseup",b4);bH.trigger(bU.canvas,"mousedown",bZ)};br.registerListener(bQ,"mousedown",bM);J[bK]=bM};bD=aL(bD);var bG=bD.length&&bD.constructor!=String?bD:[bD];for(var bF=0;bF0?bJ[0]:null,bE=bJ.length>0?0:-1,bI=this,bD=function(bM,bK,bQ,bP,bL){var bO=bP[0]+(bM.x*bL[0]),bN=bP[1]+(bM.y*bL[1]);return Math.sqrt(Math.pow(bK-bO,2)+Math.pow(bQ-bN,2))},bz=bA||function(bU,bL,bM,bN,bK){var bP=bM[0]+(bN[0]/2),bO=bM[1]+(bN[1]/2);var bR=-1,bT=Infinity;for(var bQ=0;bQ=bC.left)||(bF.left<=bC.right&&bF.right>=bC.right)||(bF.left<=bC.left&&bF.right>=bC.right)||(bC.left<=bF.left&&bC.right>=bF.right)),bK=((bF.top<=bC.top&&bF.bottom>=bC.top)||(bF.top<=bC.bottom&&bF.bottom>=bC.bottom)||(bF.top<=bC.top&&bF.bottom>=bC.bottom)||(bC.top<=bF.top&&bC.bottom>=bF.bottom));if(!(bE||bK)){var bH=null,bB=false,bz=false,bG=null;if(bC.left>bF.left&&bC.top>bF.top){bH=["right","top"]}else{if(bC.left>bF.left&&bF.top>bC.top){bH=["top","left"]}else{if(bC.leftbF.top){bH=["left","top"]}}}}return{orientation:U.DIAGONAL,a:bH,theta:bA,theta2:bD}}else{if(bE){return{orientation:U.HORIZONTAL,a:bF.topbz[0]?1:-1},aa=function(bz){return function(bB,bA){var bC=true;if(bz){if(bB[0][0]bA[0][1]}}else{if(bB[0][0]>bA[0][0]){bC=true}else{bC=bB[0][1]>bA[0][1]}}return bC===false?-1:1}},M=function(bA,bz){var bC=bA[0][0]<0?-Math.PI-bA[0][0]:Math.PI-bA[0][0],bB=bz[0][0]<0?-Math.PI-bz[0][0]:Math.PI-bz[0][0];if(bC>bB){return 1}else{return bA[0][1]>bz[0][1]?1:-1}},a2={top:bb,right:aa(true),bottom:aa(true),left:M},ar=function(bz,bA){return bz.sort(bA)},ao=function(bA,bz){var bC=ag[bA],bD=aj[bA],bB=function(bK,bR,bG,bJ,bP,bO,bF){if(bJ.length>0){var bN=ar(bJ,a2[bK]),bL=bK==="right"||bK==="top",bE=a5(bK,bR,bG,bN,bP,bO,bL);var bS=function(bV,bU){var bT=bs([bU[0],bU[1]],bV.canvas);ak[bV.id]=[bT[0],bT[1],bU[2],bU[3]];aM[bV.id]=bF};for(var bH=0;bH0){bS.connections[0].setHover(b7,false)}else{bS.setHover(b7)}};D(bS.endpoint,bS,b6);this.setPaintStyle(b5.paintStyle||b5.style||br.Defaults.EndpointStyle||n.Defaults.EndpointStyle,true);this.setHoverPaintStyle(b5.hoverPaintStyle||br.Defaults.EndpointHoverStyle||n.Defaults.EndpointHoverStyle,true);this.paintStyleInUse=this.getPaintStyle();var bN=this.getPaintStyle();this.connectorStyle=b5.connectorStyle;this.connectorHoverStyle=b5.connectorHoverStyle;this.connectorOverlays=b5.connectorOverlays;this.connector=b5.connector;this.connectorTooltip=b5.connectorTooltip;this.connectorClass=b5.connectorClass;this.connectorHoverClass=b5.connectorHoverClass;this.isSource=b5.isSource||false;this.isTarget=b5.isTarget||false;var bY=b5.maxConnections||br.Defaults.MaxConnections;this.getAttachedElements=function(){return bS.connections};this.canvas=this.endpoint.canvas;this.connections=b5.connections||[];this.scope=b5.scope||R;this.connectionType=b5.connectionType;this.timestamp=null;bS.reattachConnections=b5.reattach||br.Defaults.ReattachConnections;bS.connectionsDetachable=br.Defaults.ConnectionsDetachable;if(b5.connectionsDetachable===false||b5.detachable===false){bS.connectionsDetachable=false}var bM=b5.dragAllowedWhenFull||true;if(b5.onMaxConnections){bS.bind("maxConnections",b5.onMaxConnections)}this.computeAnchor=function(b7){return bS.anchor.compute(b7)};this.addConnection=function(b7){bS.connections.push(b7)};this.detach=function(b8,cd,b9,cg,b7){var cf=g(bS.connections,function(ci){return ci.id==b8.id}),ce=false;cg=(cg!==false);if(cf>=0){if(b9||b8._forceDetach||b8.isDetachable()||b8.isDetachAllowed(b8)){var ch=b8.endpoints[0]==bS?b8.endpoints[1]:b8.endpoints[0];if(b9||b8._forceDetach||(bS.isDetachAllowed(b8))){bS.connections.splice(cf,1);if(!cd){ch.detach(b8,true,b9);if(b8.endpointsToDeleteOnDetach){for(var cc=0;cc0){bS.detach(bS.connections[0],false,true,b8,b7)}};this.detachFrom=function(ca,b9,b7){var cb=[];for(var b8=0;b8=0){bS.connections.splice(b7,1)}};this.getElement=function(){return bR};this.setElement=function(ca,b7){var cc=H(ca);A(aV[bS.elementId],function(cd){return cd.id==bS.id});bR=C(ca);bJ=H(bR);bS.elementId=bJ;var cb=ay({source:cc,container:b7}),b9=bD.getParent(bS.canvas);bD.removeElement(bS.canvas,b9);bD.appendElement(bS.canvas,cb);for(var b8=0;b80){var cj=bO(ca.elementWithPrecedence),cl=cj.endpoints[0]==bS?1:0,cc=cl==0?cj.sourceId:cj.targetId,ci=aj[cc],ck=ag[cc];b9.txy=[ci.left,ci.top];b9.twh=ck;b9.tElement=cj.endpoints[cl]}cd=bS.anchor.compute(b9)}var ch=bP.compute(cd,bS.anchor.getOrientation(bS),bS.paintStyleInUse,cb||bS.paintStyleInUse);bP.paint(ch,bS.paintStyleInUse,bS.anchor);bS.timestamp=cg;for(var ce=0;ce0?u:n+u:u*n;return jsPlumbUtil.pointOnLine({x:i,y:h},{x:e,y:d},t)}}};this.gradientAtPoint=function(t){return f};this.pointAlongPathFrom=function(t,x,w){var v=s.pointOnPath(t,w),u=t==1?{x:i+((e-i)*10),y:h+((h-d)*10)}:{x:e,y:d};return jsPlumbUtil.pointOnLine(v,u,x)}};jsPlumb.Connectors.Bezier=function(w){var q=this;w=w||{};this.majorAnchor=w.curviness||150;this.minorAnchor=10;var u=null;this.type="Bezier";this._findControlPoint=function(I,x,D,y,B,G,z){var F=G.getOrientation(y),H=z.getOrientation(B),C=F[0]!=H[0]||F[1]==H[1],A=[],J=q.majorAnchor,E=q.minorAnchor;if(!C){if(F[0]==0){A.push(x[0]v){v=D}if(G<0){t+=G;var I=Math.abs(G);v+=I;r[0]+=I;g+=I;p+=I;m[0]+=I}var Q=Math.min(f,o),O=Math.min(r[1],m[1]),C=Math.min(Q,O),H=Math.max(f,o),F=Math.max(r[1],m[1]),z=Math.max(H,F);if(z>e){e=z}if(C<0){s+=C;var E=Math.abs(C);e+=E;r[1]+=E;f+=E;o+=E;m[1]+=E}if(M&&v0?0:1,x)}return x};this.pointOnPath=function(x,z){var y=d();x=n(y,x,z);return jsBezier.pointOnCurve(y,x)};this.gradientAtPoint=function(x,z){var y=d();x=n(y,x,z);return jsBezier.gradientAtPoint(y,x)};this.pointAlongPathFrom=function(x,A,z){var y=d();x=n(y,x,z);return jsBezier.pointAlongCurveFrom(y,x,A)}};jsPlumb.Connectors.Flowchart=function(z){this.type="Flowchart";z=z||{};var r=this,e=z.stub||z.minStubLength||30,i=jsPlumbUtil.isArray(e)?e[0]:e,o=jsPlumbUtil.isArray(e)?e[1]:e,t=z.gap||0,u=[],m=0,g=[],q=[],v=[],s,p,y=-Infinity,w=-Infinity,A=Infinity,x=Infinity,d=z.grid,f=function(G,C){var F=G%C,D=Math.floor(G/C),E=F>(C/2)?1:0;return(D+E)*C},n=function(C,F,E,D){return[E||d==null?C:f(C,d[0]),D||d==null?F:f(F,d[1])]},B=function(D,C,H,G){var F=0;for(var E=0;E0?E/m:(m+E)/m}var C=g.length-1,D=1;for(var F=0;F=E){C=F;D=(E-g[F][0])/q[F];break}}return{segment:u[C],proportion:D,index:C}};this.compute=function(Z,an,C,T,ay,N,X,S,at,ap){u=[];g=[];m=0;q=[];y=w=-Infinity;A=x=Infinity;r.lineWidth=X;s=an[0]ax?0:1,ah=[1,0][af];Q=[];az=[];Q[af]=Z[af]>an[af]?-1:1;az[af]=Z[af]>an[af]?1:-1;Q[ah]=0;az[ah]=0}var L=s?(ao-E)+(t*Q[0]):H+(t*Q[0]),K=p?(ax-D)+(t*Q[1]):G+(t*Q[1]),av=s?H+(t*az[0]):(ao-E)+(t*az[0]),au=p?G+(t*az[1]):(ax-D)+(t*az[1]),ac=L+(Q[0]*i),ab=K+(Q[1]*i),O=av+(az[0]*o),M=au+(az[1]*o),Y=Math.abs(L-av)>(i+o),aa=Math.abs(K-au)>(i+o),ak=ac+((O-ac)/2),ai=ab+((M-ab)/2),R=((Q[0]*az[0])+(Q[1]*az[1])),ae=R==-1,ag=R==0,F=R==1;am-=H;al-=G;v=[am,al,ao,ax,L,K,av,au];var ar=[];var V=Q[0]==0?"y":"x",P=ae?"opposite":F?"orthogonal":"perpendicular",I=jsPlumbUtil.segment([L,K],[av,au]),aj=Q[V=="x"?0:1]==-1,U={x:[null,4,3,2,1],y:[null,2,1,4,3]};if(aj){I=U[V][I]}k(ac,ab,L,K,av,au);var W=function(aD,aC,aA,aB){return aD+(aC*((1-aA)*aB)+Math.max(i,o))},J={oppositex:function(){if(C.elementId==T.elementId){var aA=ab+((1-ay.y)*at.height)+Math.max(i,o);return[[ac,aA],[O,aA]]}else{if(Y&&(I==1||I==2)){return[[ak,K],[ak,au]]}else{return[[ac,ai],[O,ai]]}}},orthogonalx:function(){if(I==1||I==2){return[[O,ab]]}else{return[[ac,M]]}},perpendicularx:function(){var aA=(au+K)/2;if((I==1&&az[1]==1)||(I==2&&az[1]==-1)){if(Math.abs(av-L)>Math.max(i,o)){return[[O,ab]]}else{return[[ac,ab],[ac,aA],[O,aA]]}}else{if((I==3&&az[1]==-1)||(I==4&&az[1]==1)){return[[ac,aA],[O,aA]]}else{if((I==3&&az[1]==1)||(I==4&&az[1]==-1)){return[[ac,M]]}else{if((I==1&&az[1]==-1)||(I==2&&az[1]==1)){if(Math.abs(av-L)>Math.max(i,o)){return[[ak,ab],[ak,M]]}else{return[[ac,M]]}}}}}},oppositey:function(){if(C.elementId==T.elementId){var aA=ac+((1-ay.x)*at.width)+Math.max(i,o);return[[aA,ab],[aA,M]]}else{if(aa&&(I==2||I==3)){return[[L,ai],[av,ai]]}else{return[[ak,ab],[ak,M]]}}},orthogonaly:function(){if(I==2||I==3){return[[ac,M]]}else{return[[O,ab]]}},perpendiculary:function(){var aA=(av+L)/2;if((I==2&&az[0]==-1)||(I==3&&az[0]==1)){if(Math.abs(av-L)>Math.max(i,o)){return[[ac,M]]}else{return[[ac,ai],[O,ai]]}}else{if((I==1&&az[0]==-1)||(I==4&&az[0]==1)){var aA=(av+L)/2;return[[aA,ab],[aA,M]]}else{if((I==1&&az[0]==1)||(I==4&&az[0]==-1)){return[[O,ab]]}else{if((I==2&&az[0]==1)||(I==3&&az[0]==-1)){if(Math.abs(au-K)>Math.max(i,o)){return[[ac,ai],[O,ai]]}else{return[[O,ab]]}}}}}}};var aq=J[P+V]();if(aq){for(var aw=0;awv[3]){v[3]=w+(X*2)}if(y>v[2]){v[2]=y+(X*2)}return v};this.pointOnPath=function(C,D){return r.pointAlongPathFrom(C,0,D)};this.gradientAtPoint=function(C,D){return u[h(C,D)["index"]][4]};this.pointAlongPathFrom=function(J,C,I){var K=h(J,I),G=K.segment,D=K.proportion,F=u[K.index][5],E=u[K.index][4];var H={x:E==Infinity?G[2]:G[2]>G[0]?G[0]+((1-D)*F)-C:G[2]+(D*F)+C,y:E==0?G[3]:G[3]>G[1]?G[1]+((1-D)*F)-C:G[3]+(D*F)+C,segmentInfo:K};return H}};jsPlumb.Endpoints.Dot=function(e){this.type="Dot";var d=this;e=e||{};this.radius=e.radius||10;this.defaultOffset=0.5*this.radius;this.defaultInnerRadius=this.radius/3;this.compute=function(k,g,m,i){var h=m.radius||d.radius,f=k[0]-h,l=k[1]-h;return[f,l,h*2,h*2,h]}};jsPlumb.Endpoints.Rectangle=function(e){this.type="Rectangle";var d=this;e=e||{};this.width=e.width||20;this.height=e.height||20;this.compute=function(l,h,n,k){var i=n.width||d.width,g=n.height||d.height,f=l[0]-(i/2),m=l[1]-(g/2);return[f,m,i,g]}};var b=function(f){jsPlumb.DOMElementComponent.apply(this,arguments);var d=this;var e=[];this.getDisplayElements=function(){return e};this.appendDisplayElement=function(g){e.push(g)}};jsPlumb.Endpoints.Image=function(i){this.type="Image";b.apply(this,arguments);var n=this,h=false,g=false,f=i.width,e=i.height,l=null,d=i.endpoint;this.img=new Image();n.ready=false;this.img.onload=function(){n.ready=true;f=f||n.img.width;e=e||n.img.height;if(l){l(n)}};d.setImage=function(o,q){var p=o.constructor==String?o:o.src;l=q;n.img.src=o;if(n.canvas!=null){n.canvas.setAttribute("src",o)}};d.setImage(i.src||i.url,i.onload);this.compute=function(q,o,r,p){n.anchorPoint=q;if(n.ready){return[q[0]-f/2,q[1]-e/2,f,e]}else{return[0,0,0,0]}};n.canvas=document.createElement("img"),h=false;n.canvas.style.margin=0;n.canvas.style.padding=0;n.canvas.style.outline=0;n.canvas.style.position="absolute";var k=i.cssClass?" "+i.cssClass:"";n.canvas.className=jsPlumb.endpointClass+k;if(f){n.canvas.setAttribute("width",f)}if(e){n.canvas.setAttribute("height",e)}jsPlumb.appendElement(n.canvas,i.parent);n.attachListeners(n.canvas,n);n.cleanup=function(){g=true};var m=function(r,q,p){if(!g){if(!h){n.canvas.setAttribute("src",n.img.src);n.appendDisplayElement(n.canvas);h=true}var o=n.anchorPoint[0]-(f/2),s=n.anchorPoint[1]-(e/2);jsPlumb.sizeCanvas(n.canvas,o,s,f,e)}};this.paint=function(q,p,o){if(n.ready){m(q,p,o)}else{window.setTimeout(function(){n.paint(q,p,o)},200)}}};jsPlumb.Endpoints.Blank=function(e){var d=this;this.type="Blank";b.apply(this,arguments);this.compute=function(h,f,i,g){return[h[0],h[1],10,0]};d.canvas=document.createElement("div");d.canvas.style.display="block";d.canvas.style.width="1px";d.canvas.style.height="1px";d.canvas.style.background="transparent";d.canvas.style.position="absolute";d.canvas.className=d._jsPlumb.endpointClass;jsPlumb.appendElement(d.canvas,e.parent);this.paint=function(h,g,f){jsPlumb.sizeCanvas(d.canvas,h[0],h[1],h[2],h[3])}};jsPlumb.Endpoints.Triangle=function(d){this.type="Triangle";d=d||{};d.width=d.width||55;d.height=d.height||55;this.width=d.width;this.height=d.height;this.compute=function(k,g,m,i){var h=m.width||self.width,f=m.height||self.height,e=k[0]-(h/2),l=k[1]-(f/2);return[e,l,h,f]}};var c=function(f){var e=true,d=this;this.isAppendedAtTopLevel=true;this.component=f.component;this.loc=f.location==null?0.5:f.location;this.endpointLoc=f.endpointLocation==null?[0.5,0.5]:f.endpointLocation;this.setVisible=function(g){e=g;d.component.repaint()};this.isVisible=function(){return e};this.hide=function(){d.setVisible(false)};this.show=function(){d.setVisible(true)};this.incrementLocation=function(g){d.loc+=g;d.component.repaint()};this.setLocation=function(g){d.loc=g;d.component.repaint()};this.getLocation=function(){return d.loc}};jsPlumb.Overlays.Arrow=function(h){this.type="Arrow";c.apply(this,arguments);this.isAppendedAtTopLevel=false;h=h||{};var e=this;this.length=h.length||20;this.width=h.width||20;this.id=h.id;var g=(h.direction||1)<0?-1:1,f=h.paintStyle||{lineWidth:1},d=h.foldback||0.623;this.computeMaxSize=function(){return e.width*1.5};this.cleanup=function(){};this.draw=function(m,A,v){var p,w,i,q,o;if(m.pointAlongPathFrom){if(jsPlumbUtil.isString(e.loc)||e.loc>1||e.loc<0){var k=parseInt(e.loc);p=m.pointAlongPathFrom(k,g*e.length/2,true),w=m.pointOnPath(k,true),i=jsPlumbUtil.pointOnLine(p,w,e.length)}else{if(e.loc==1){p=m.pointOnPath(e.loc);w=m.pointAlongPathFrom(e.loc,-1);i=jsPlumbUtil.pointOnLine(p,w,e.length)}else{if(e.loc==0){i=m.pointOnPath(e.loc);w=m.pointAlongPathFrom(e.loc,1);p=jsPlumbUtil.pointOnLine(i,w,e.length)}else{p=m.pointAlongPathFrom(e.loc,g*e.length/2),w=m.pointOnPath(e.loc),i=jsPlumbUtil.pointOnLine(p,w,e.length)}}}q=jsPlumbUtil.perpendicularLineTo(p,i,e.width);o=jsPlumbUtil.pointOnLine(p,i,d*e.length);var z=Math.min(p.x,q[0].x,q[1].x),t=Math.max(p.x,q[0].x,q[1].x),y=Math.min(p.y,q[0].y,q[1].y),s=Math.max(p.y,q[0].y,q[1].y);var r={hxy:p,tail:q,cxy:o},u=f.strokeStyle||A.strokeStyle,x=f.fillStyle||A.strokeStyle,n=f.lineWidth||A.lineWidth;e.paint(m,r,n,u,x,v);return[z,t,y,s]}else{return[0,0,0,0]}}};jsPlumb.Overlays.PlainArrow=function(e){e=e||{};var d=jsPlumb.extend(e,{foldback:1});jsPlumb.Overlays.Arrow.call(this,d);this.type="PlainArrow"};jsPlumb.Overlays.Diamond=function(f){f=f||{};var d=f.length||40,e=jsPlumb.extend(f,{length:d/2,foldback:2});jsPlumb.Overlays.Arrow.call(this,e);this.type="Diamond"};var a=function(i){jsPlumb.DOMElementComponent.apply(this,arguments);c.apply(this,arguments);var d=this,e=false;i=i||{};this.id=i.id;var l;var h=function(){l=i.create(i.component);l=jsPlumb.CurrentLibrary.getDOMElement(l);l.style.position="absolute";var m=i._jsPlumb.overlayClass+" "+(d.cssClass?d.cssClass:i.cssClass?i.cssClass:"");l.className=m;jsPlumb.appendElement(l,i.component.parent);i._jsPlumb.getId(l);d.attachListeners(l,d);d.canvas=l};this.getElement=function(){if(l==null){h()}return l};this.getDimensions=function(){return jsPlumb.CurrentLibrary.getSize(jsPlumb.CurrentLibrary.getElementObject(d.getElement()))};var f=null,k=function(m){if(f==null){f=d.getDimensions()}return f};this.clearCachedDimensions=function(){f=null};this.computeMaxSize=function(){var m=k();return Math.max(m[0],m[1])};var g=d.setVisible;d.setVisible=function(m){g(m);l.style.display=m?"block":"none"};this.cleanup=function(){if(l!=null){jsPlumb.CurrentLibrary.removeElement(l)}};this.paint=function(m,o,n){if(!e){d.getElement();m.appendDisplayElement(l);d.attachListeners(l,m);e=true}l.style.left=(n[0]+o.minx)+"px";l.style.top=(n[1]+o.miny)+"px"};this.draw=function(n,o,p){var t=k();if(t!=null&&t.length==2){var q={x:0,y:0};if(n.pointOnPath){var r=d.loc,s=false;if(jsPlumbUtil.isString(d.loc)||d.loc<0||d.loc>1){r=parseInt(d.loc);s=true}q=n.pointOnPath(r,s)}else{var m=d.loc.constructor==Array?d.loc:d.endpointLoc;q={x:m[0]*p[2],y:m[1]*p[3]}}minx=q.x-(t[0]/2),miny=q.y-(t[1]/2);d.paint(n,{minx:minx,miny:miny,td:t,cxy:q},p);return[minx,minx+t[0],miny,miny+t[1]]}else{return[0,0,0,0]}};this.reattachListeners=function(m){if(l){d.reattachListenersForElement(l,d,m)}}};jsPlumb.Overlays.Custom=function(d){this.type="Custom";a.apply(this,arguments)};jsPlumb.Overlays.Label=function(h){var d=this;this.labelStyle=h.labelStyle||jsPlumb.Defaults.LabelStyle;this.cssClass=this.labelStyle!=null?this.labelStyle.cssClass:null;h.create=function(){return document.createElement("div")};jsPlumb.Overlays.Custom.apply(this,arguments);this.type="Label";var f=h.label||"",d=this,g=null;this.setLabel=function(k){f=k;g=null;d.clearCachedDimensions();e();d.component.repaint()};var e=function(){if(typeof f=="function"){var k=f(d);d.getElement().innerHTML=k.replace(/\r\n/g,"
    ")}else{if(g==null){g=f;d.getElement().innerHTML=g.replace(/\r\n/g,"
    ")}}};this.getLabel=function(){return f};var i=this.getDimensions;this.getDimensions=function(){e();return i()}}})();(function(){var c=function(e,g,d,f){this.m=(f-g)/(d-e);this.b=-1*((this.m*e)-g);this.rectIntersect=function(q,p,s,o){var n=[];var k=(p-this.b)/this.m;if(k>=q&&k<=(q+s)){n.push([k,(this.m*k)+this.b])}var t=(this.m*(q+s))+this.b;if(t>=p&&t<=(p+o)){n.push([(t-this.b)/this.m,t])}var k=((p+o)-this.b)/this.m;if(k>=q&&k<=(q+s)){n.push([k,(this.m*k)+this.b])}var t=(this.m*q)+this.b;if(t>=p&&t<=(p+o)){n.push([(t-this.b)/this.m,t])}if(n.length==2){var m=(n[0][0]+n[1][0])/2,l=(n[0][1]+n[1][1])/2;n.push([m,l]);var i=m<=q+(s/2)?-1:1,r=l<=p+(o/2)?-1:1;n.push([i,r]);return n}return null}},a=function(e,g,d,f){if(e<=d&&f<=g){return 1}else{if(e<=d&&g<=f){return 2}else{if(d<=e&&f>=g){return 3}}}return 4},b=function(g,f,i,e,h,m,l,d,k){if(d<=k){return[g,f]}if(i==1){if(e[3]<=0&&h[3]>=1){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]>=1&&h[2]<=0){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(-1*m),f+(-1*l)]}}}else{if(i==2){if(e[3]>=1&&h[3]<=0){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]>=1&&h[2]<=0){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(1*m),f+(-1*l)]}}}else{if(i==3){if(e[3]>=1&&h[3]<=0){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]<=0&&h[2]>=1){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(-1*m),f+(-1*l)]}}}else{if(i==4){if(e[3]<=0&&h[3]>=1){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]<=0&&h[2]>=1){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(1*m),f+(-1*l)]}}}}}}};jsPlumb.Connectors.StateMachine=function(l){var u=this,n=null,o,m,g,e,p=[],d=l.curviness||10,k=l.margin||5,q=l.proximityLimit||80,f=l.orientation&&l.orientation=="clockwise",i=l.loopbackRadius||25,h=false,t=l.showLoopback!==false;this.type="StateMachine";l=l||{};this.compute=function(ad,H,W,I,ac,z,v,U){var Q=Math.abs(ad[0]-H[0]),Y=Math.abs(ad[1]-H[1]),S=0.45*Q,ab=0.45*Y;Q*=1.9;Y*=1.9;v=v||1;var O=Math.min(ad[0],H[0])-S,M=Math.min(ad[1],H[1])-ab;if(!t||(W.elementId!=I.elementId)){h=false;o=ad[0]0?0:1,v)}return v};this.pointOnPath=function(x,B){if(h){if(B){var y=Math.PI*2*i;x=x/y}if(x>0&&x<1){x=1-x}var z=(x*2*Math.PI)+(Math.PI/2),w=n[4]+(n[6]*Math.cos(z)),v=n[5]+(n[6]*Math.sin(z));return{x:w,y:v}}else{var A=r();x=s(A,x,B);return jsBezier.pointOnCurve(A,x)}};this.gradientAtPoint=function(v,y){if(h){if(y){var w=Math.PI*2*i;v=v/w}return Math.atan(v*2*Math.PI)}else{var x=r();v=s(x,v,y);return jsBezier.gradientAtPoint(x,v)}};this.pointAlongPathFrom=function(D,v,C){if(h){if(C){var B=Math.PI*2*i;D=D/B}if(D>0&&D<1){D=1-D}var B=2*Math.PI*n[6],w=v/B*2*Math.PI,z=(D*2*Math.PI)-w+(Math.PI/2),y=n[4]+(n[6]*Math.cos(z)),x=n[5]+(n[6]*Math.sin(z));return{x:y,y:x}}else{var A=r();D=s(A,D,C);return jsBezier.pointAlongCurveFrom(A,D,v)}}};jsPlumb.Connectors.canvas.StateMachine=function(f){f=f||{};var d=this,g=f.drawGuideline||true,e=f.avoidSelector;jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.CanvasConnector.apply(this,arguments);this._paint=function(l){if(l.length==10){d.ctx.beginPath();d.ctx.moveTo(l[4],l[5]);d.ctx.bezierCurveTo(l[8],l[9],l[8],l[9],l[6],l[7]);d.ctx.stroke()}else{d.ctx.save();d.ctx.beginPath();var k=0,i=2*Math.PI,h=l[7];d.ctx.arc(l[4],l[5],l[6],0,i,h);d.ctx.stroke();d.ctx.closePath();d.ctx.restore()}};this.createGradient=function(i,h){return h.createLinearGradient(i[4],i[5],i[6],i[7])}};jsPlumb.Connectors.svg.StateMachine=function(){var d=this;jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.SvgConnector.apply(this,arguments);this.getPath=function(e){if(e.length==10){return"M "+e[4]+" "+e[5]+" C "+e[8]+" "+e[9]+" "+e[8]+" "+e[9]+" "+e[6]+" "+e[7]}else{return"M"+(e[8]+4)+" "+e[9]+" A "+e[6]+" "+e[6]+" 0 1,0 "+(e[8]-4)+" "+e[9]}}};jsPlumb.Connectors.vml.StateMachine=function(){jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.VmlConnector.apply(this,arguments);var d=jsPlumb.vml.convertValue;this.getPath=function(k){if(k.length==10){return"m"+d(k[4])+","+d(k[5])+" c"+d(k[8])+","+d(k[9])+","+d(k[8])+","+d(k[9])+","+d(k[6])+","+d(k[7])+" e"}else{var h=d(k[8]-k[6]),g=d(k[9]-(2*k[6])),f=h+d(2*k[6]),e=g+d(2*k[6]),l=h+","+g+","+f+","+e;var i="ar "+l+","+d(k[8])+","+d(k[9])+","+d(k[8])+","+d(k[9])+" e";return i}}}})();(function(){var h={"stroke-linejoin":"joinstyle",joinstyle:"joinstyle",endcap:"endcap",miterlimit:"miterlimit"},c=null;if(document.createStyleSheet&&document.namespaces){var m=[".jsplumb_vml","jsplumb\\:textbox","jsplumb\\:oval","jsplumb\\:rect","jsplumb\\:stroke","jsplumb\\:shape","jsplumb\\:group"],g="behavior:url(#default#VML);position:absolute;";c=document.createStyleSheet();for(var r=0;rF?1:-1:0,K=N?Q>P?1:-1:0,O=D.lineWidth/2;G=G+" L "+H+" "+Q;G=G+" L "+(H+(L*O))+" "+(Q+(K*O));J=H;I=Q;G=G+" M "+H+" "+Q}G=G+" L "+E[6]+","+E[7];return G}};var y=window.SvgEndpoint=function(E){var D=this;s.apply(this,[{cssClass:E._jsPlumb.endpointClass,originalArgs:arguments,pointerEventsSpec:"all",useDivWrapper:true,_jsPlumb:E._jsPlumb}]);this._paint=function(H,G){var F=jsPlumb.extend({},G);if(F.outlineColor){F.strokeWidth=F.outlineWidth;F.strokeStyle=jsPlumbUtil.convertStyle(F.outlineColor,true)}if(D.node==null){D.node=D.makeNode(H,F);D.svg.appendChild(D.node);D.attachListeners(D.node,D)}x(D.svg,D.node,F,H,D);n(D.node,H)};this.reattachListeners=function(){if(D.node){D.reattachListenersForElement(D.node,D)}}};jsPlumb.Endpoints.svg.Dot=function(){jsPlumb.Endpoints.Dot.apply(this,arguments);y.apply(this,arguments);this.makeNode=function(E,D){return f("circle",{cx:E[2]/2,cy:E[3]/2,r:E[2]/2})}};jsPlumb.Endpoints.svg.Rectangle=function(){jsPlumb.Endpoints.Rectangle.apply(this,arguments);y.apply(this,arguments);this.makeNode=function(E,D){return f("rect",{width:E[2],height:E[3]})}};jsPlumb.Endpoints.svg.Image=jsPlumb.Endpoints.Image;jsPlumb.Endpoints.svg.Blank=jsPlumb.Endpoints.Blank;jsPlumb.Overlays.svg.Label=jsPlumb.Overlays.Label;jsPlumb.Overlays.svg.Custom=jsPlumb.Overlays.Custom;var p=function(H,F){H.apply(this,F);jsPlumb.jsPlumbUIComponent.apply(this,F);this.isAppendedAtTopLevel=false;var D=this,G=null;this.paint=function(J,M,I,N,K){if(G==null){G=f("path",{"pointer-events":"all"});J.svg.appendChild(G);D.attachListeners(G,J);D.attachListeners(G,D)}var L=F&&(F.length==1)?(F[0].cssClass||""):"";g(G,{d:E(M),"class":L,stroke:N?N:null,fill:K?K:null})};var E=function(I){return"M"+I.hxy.x+","+I.hxy.y+" L"+I.tail[0].x+","+I.tail[0].y+" L"+I.cxy.x+","+I.cxy.y+" L"+I.tail[1].x+","+I.tail[1].y+" L"+I.hxy.x+","+I.hxy.y};this.reattachListeners=function(){if(G){D.reattachListenersForElement(G,D)}};this.cleanup=function(){if(G!=null){jsPlumb.CurrentLibrary.removeElement(G)}}};jsPlumb.Overlays.svg.Arrow=function(){p.apply(this,[jsPlumb.Overlays.Arrow,arguments])};jsPlumb.Overlays.svg.PlainArrow=function(){p.apply(this,[jsPlumb.Overlays.PlainArrow,arguments])};jsPlumb.Overlays.svg.Diamond=function(){p.apply(this,[jsPlumb.Overlays.Diamond,arguments])};jsPlumb.Overlays.svg.GuideLines=function(){var I=null,D=this,H=null,G,F;jsPlumb.Overlays.GuideLines.apply(this,arguments);this.paint=function(K,M,J,N,L){if(I==null){I=f("path");K.svg.appendChild(I);D.attachListeners(I,K);D.attachListeners(I,D);G=f("path");K.svg.appendChild(G);D.attachListeners(G,K);D.attachListeners(G,D);F=f("path");K.svg.appendChild(F);D.attachListeners(F,K);D.attachListeners(F,D)}g(I,{d:E(M[0],M[1]),stroke:"red",fill:null});g(G,{d:E(M[2][0],M[2][1]),stroke:"blue",fill:null});g(F,{d:E(M[3][0],M[3][1]),stroke:"green",fill:null})};var E=function(K,J){return"M "+K.x+","+K.y+" L"+J.x+","+J.y}}})();(function(){var d=null,i=function(p,o){return jsPlumb.CurrentLibrary.hasClass(a(p),o)},a=function(o){return jsPlumb.CurrentLibrary.getElementObject(o)},m=function(o){return jsPlumb.CurrentLibrary.getOffset(a(o))},n=function(o){return jsPlumb.CurrentLibrary.getPageXY(o)},f=function(o){return jsPlumb.CurrentLibrary.getClientXY(o)};var k=function(){var q=this;q.overlayPlacements=[];jsPlumb.jsPlumbUIComponent.apply(this,arguments);jsPlumbUtil.EventGenerator.apply(this,arguments);this._over=function(z){var B=m(a(q.canvas)),D=n(z),u=D[0]-B.left,C=D[1]-B.top;if(u>0&&C>0&&u=u&&w[2]<=C&&w[3]>=C)){return true}}var A=q.canvas.getContext("2d").getImageData(parseInt(u),parseInt(C),1,1);return A.data[0]!=0||A.data[1]!=0||A.data[2]!=0||A.data[3]!=0}return false};var p=false,o=false,t=null,s=false,r=function(v,u){return v!=null&&i(v,u)};this.mousemove=function(x){var z=n(x),w=f(x),v=document.elementFromPoint(w[0],w[1]),y=r(v,"_jsPlumb_overlay");var u=d==null&&(r(v,"_jsPlumb_endpoint")||r(v,"_jsPlumb_connector"));if(!p&&u&&q._over(x)){p=true;q.fire("mouseenter",q,x);return true}else{if(p&&(!q._over(x)||!u)&&!y){p=false;q.fire("mouseexit",q,x)}}q.fire("mousemove",q,x)};this.click=function(u){if(p&&q._over(u)&&!s){q.fire("click",q,u)}s=false};this.dblclick=function(u){if(p&&q._over(u)&&!s){q.fire("dblclick",q,u)}s=false};this.mousedown=function(u){if(q._over(u)&&!o){o=true;t=m(a(q.canvas));q.fire("mousedown",q,u)}};this.mouseup=function(u){o=false;q.fire("mouseup",q,u)};this.contextmenu=function(u){if(p&&q._over(u)&&!s){q.fire("contextmenu",q,u)}s=false}};var c=function(p){var o=document.createElement("canvas");p._jsPlumb.appendElement(o,p.parent);o.style.position="absolute";if(p["class"]){o.className=p["class"]}p._jsPlumb.getId(o,p.uuid);if(p.tooltip){o.setAttribute("title",p.tooltip)}return o};var l=function(p){k.apply(this,arguments);var o=[];this.getDisplayElements=function(){return o};this.appendDisplayElement=function(q){o.push(q)}};var h=jsPlumb.CanvasConnector=function(r){l.apply(this,arguments);var o=function(v,t){p.ctx.save();jsPlumb.extend(p.ctx,t);if(t.gradient){var u=p.createGradient(v,p.ctx);for(var s=0;s0?c[0].tagName:null},getUIPosition:function(c,d){d=d||1;if(c.length==1){ret={left:c[0].pageX,top:c[0].pageY}}else{var e=c[1],b=e.offset;ret=b||e.absolutePosition;e.position.left/=d;e.position.top/=d}return{left:ret.left/d,top:ret.top/d}},hasClass:function(c,b){return c.hasClass(b)},initDraggable:function(c,b,d){b=b||{};b.helper=null;if(d){b.scope=b.scope||jsPlumb.Defaults.Scope}c.draggable(b)},initDroppable:function(c,b){b.scope=b.scope||jsPlumb.Defaults.Scope;c.droppable(b)},isAlreadyDraggable:function(b){b=jsPlumb.CurrentLibrary.getElementObject(b);return b.hasClass("ui-draggable")},isDragSupported:function(c,b){return c.draggable},isDropSupported:function(c,b){return c.droppable},removeClass:function(c,b){c=jsPlumb.CurrentLibrary.getElementObject(c);try{if(c[0].className.constructor==SVGAnimatedString){jsPlumbUtil.svg.removeClass(c[0],b)}}catch(d){}c.removeClass(b)},removeElement:function(b,c){jsPlumb.CurrentLibrary.getElementObject(b).remove()},setAttribute:function(c,d,b){c.attr(d,b)},setDraggable:function(c,b){c.draggable("option","disabled",!b)},setDragScope:function(c,b){c.draggable("option","scope",b)},setOffset:function(b,c){jsPlumb.CurrentLibrary.getElementObject(b).offset(c)},trigger:function(d,e,b){var c=jQuery._data(jsPlumb.CurrentLibrary.getElementObject(d)[0],"handle");c(b)},unbind:function(b,c,d){b=jsPlumb.CurrentLibrary.getElementObject(b);b.unbind(c,d)}};a(document).ready(jsPlumb.init)})(jQuery);(function(){"undefined"==typeof Math.sgn&&(Math.sgn=function(l){return 0==l?0:0=64){x[0]=(C[0].x+C[B].x)/2;return 1}var p,u=C[0].y-C[B].y;y=C[B].x-C[0].x;q=C[0].x*C[B].y-C[B].x*C[0].y;s=max_distance_below=0;for(p=1;ps?s=r:r0?1:-1,r=null;n1){l.location=1}if(l.location<0){l.location=0}return i(m,l.location)},nearestPointOnCurve:function(m,l){var n=h(m,l);return{point:k(l,l.length-1,n.location,null,null),location:n.location}},pointOnCurve:c,pointAlongCurveFrom:function(m,l,n){return b(m,l,n).point},perpendicularToCurveAt:function(m,l,n,o){l=b(m,l,o==null?0:o);m=i(m,l.location);o=Math.atan(-1/m);m=n/2*Math.sin(o);n=n/2*Math.cos(o);return[{x:l.point.x+n,y:l.point.y+m},{x:l.point.x-n,y:l.point.y-m}]},locationAlongCurveFrom:function(m,l,n){return b(m,l,n).location}}})(); \ No newline at end of file diff --git a/book/common/ext/codelens/v3/js/jquery.qtip.min.js b/book/common/ext/codelens/v3/js/jquery.qtip.min.js new file mode 100644 index 0000000..3971f6d --- /dev/null +++ b/book/common/ext/codelens/v3/js/jquery.qtip.min.js @@ -0,0 +1,2 @@ +/*! qTip2 v2.0.0 | http://craigsworks.com/projects/qtip2/ | Licensed MIT, GPL */ +(function(a,b,c){(function(a){"use strict",typeof define=="function"&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)})(function(d){function I(a){var b=function(a){return a===g||"object"!=typeof a},c=function(a){return!d.isFunction(a)&&(!a&&!a.attr||a.length<1||"object"==typeof a&&!a.jquery)};if(!a||"object"!=typeof a)return f;b(a.metadata)&&(a.metadata={type:a.metadata});if("content"in a){if(b(a.content)||a.content.jquery)a.content={text:a.content};c(a.content.text||f)&&(a.content.text=f),"title"in a.content&&(b(a.content.title)&&(a.content.title={text:a.content.title}),c(a.content.title.text||f)&&(a.content.title.text=f))}return"position"in a&&b(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&b(a.show)&&(a.show=a.show.jquery?{target:a.show}:{event:a.show}),"hide"in a&&b(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&b(a.style)&&(a.style={classes:a.style}),d.each(u,function(){this.sanitize&&this.sanitize(a)}),a}function J(h,i,q,r){function Q(a){var b=0,c,d=i,e=a.split(".");while(d=d[e[b++]])b",{"class":"ui-state-default ui-tooltip-close "+(i.style.widget?"":x+"-icon"),title:c,"aria-label":c}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),O.button.appendTo(O.titlebar).attr("role","button").click(function(a){return M.hasClass(z)||s.hide(a),f}),s.redraw()}function V(){var a=J+"-title";O.titlebar&&T(),O.titlebar=d("
    ",{"class":x+"-titlebar "+(i.style.widget?"ui-widget-header":"")}).append(O.title=d("
    ",{id:a,"class":x+"-title","aria-atomic":e})).insertBefore(O.content).delegate(".ui-tooltip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus",a.type.substr(-4)==="down")}).delegate(".ui-tooltip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover",a.type==="mouseover")}),i.content.title.button?U():s.rendered&&s.redraw()}function W(a){var b=O.button,c=O.title;if(!s.rendered)return f;a?(c||V(),U()):b.remove()}function X(a,b){var c=O.title;if(!s.rendered||!a)return f;d.isFunction(a)&&(a=a.call(h,P.event,s));if(a===f||!a&&a!=="")return T(f);a.jquery&&a.length>0?c.empty().append(a.css({display:"block"})):c.html(a),s.redraw(),b!==f&&s.rendered&&M[0].offsetWidth>0&&s.reposition(P.event)}function Y(a,b){function g(a){function i(c){c&&(delete h[c.src],clearTimeout(s.timers.img[c.src]),d(c).unbind(N)),d.isEmptyObject(h)&&(s.redraw(),b!==f&&s.reposition(P.event),a())}var g,h={};if((g=e.find("img[src]:not([height]):not([width])")).length===0)return i();g.each(function(a,b){if(h[b.src]!==c)return;var e=0,f=3;(function g(){if(b.height||b.width||e>f)return i(b);e+=1,s.timers.img[b.src]=setTimeout(g,700)})(),d(b).bind("error"+N+" load"+N,function(){i(this)}),h[b.src]=b})}var e=O.content;return!s.rendered||!a?f:(d.isFunction(a)&&(a=a.call(h,P.event,s)||""),a.jquery&&a.length>0?e.empty().append(a.css({display:"block"})):e.html(a),s.rendered<0?M.queue("fx",g):(L=0,g(d.noop)),s)}function Z(){function l(a){if(M.hasClass(z))return f;clearTimeout(s.timers.show),clearTimeout(s.timers.hide);var b=function(){s.toggle(e,a)};i.show.delay>0?s.timers.show=setTimeout(b,i.show.delay):b()}function m(a){if(M.hasClass(z)||K||L)return f;var b=d(a.relatedTarget||a.target),e=b.closest(A)[0]===M[0],h=b[0]===g.show[0];clearTimeout(s.timers.show),clearTimeout(s.timers.hide);if(c.target==="mouse"&&e||i.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(e||h)){try{a.preventDefault(),a.stopImmediatePropagation()}catch(j){}return}i.hide.delay>0?s.timers.hide=setTimeout(function(){s.hide(a)},i.hide.delay):s.hide(a)}function n(a){if(M.hasClass(z))return f;clearTimeout(s.timers.inactive),s.timers.inactive=setTimeout(function(){s.hide(a)},i.hide.inactive)}function o(a){s.rendered&&M[0].offsetWidth>0&&s.reposition(a)}var c=i.position,g={show:i.show.target,hide:i.hide.target,viewport:d(c.viewport),document:d(b),body:d(b.body),window:d(a)},j={show:d.trim(""+i.show.event).split(" "),hide:d.trim(""+i.hide.event).split(" ")},k=d.browser.msie&&parseInt(d.browser.version,10)===6;M.bind("mouseenter"+N+" mouseleave"+N,function(a){var b=a.type==="mouseenter";b&&s.focus(a),M.toggleClass(D,b)}),/mouse(out|leave)/i.test(i.hide.event)&&i.hide.leave==="window"&&g.window.bind("mouseout"+N+" blur"+N,function(a){!/select|option/.test(a.target.nodeName)&&!a.relatedTarget&&s.hide(a)}),i.hide.fixed?(g.hide=g.hide.add(M),M.bind("mouseover"+N,function(){M.hasClass(z)||clearTimeout(s.timers.hide)})):/mouse(over|enter)/i.test(i.show.event)&&g.hide.bind("mouseleave"+N,function(a){clearTimeout(s.timers.show)}),(""+i.hide.event).indexOf("unfocus")>-1&&c.container.closest("html").bind("mousedown"+N,function(a){var b=d(a.target),c=s.rendered&&!M.hasClass(z)&&M[0].offsetWidth>0,e=b.parents(A).filter(M[0]).length>0;b[0]!==h[0]&&b[0]!==M[0]&&!e&&!h.has(b[0]).length&&!b.attr("disabled")&&s.hide(a)}),"number"==typeof i.hide.inactive&&(g.show.bind("qtip-"+q+"-inactive",n),d.each(t.inactiveEvents,function(a,b){g.hide.add(O.tooltip).bind(b+N+"-inactive",n)})),d.each(j.hide,function(a,b){var c=d.inArray(b,j.show),e=d(g.hide);c>-1&&e.add(g.show).length===e.length||b==="unfocus"?(g.show.bind(b+N,function(a){M[0].offsetWidth>0?m(a):l(a)}),delete j.show[c]):g.hide.bind(b+N,m)}),d.each(j.show,function(a,b){g.show.bind(b+N,l)}),"number"==typeof i.hide.distance&&g.show.add(M).bind("mousemove"+N,function(a){var b=P.origin||{},c=i.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&s.hide(a)}),c.target==="mouse"&&(g.show.bind("mousemove"+N,function(a){v={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),c.adjust.mouse&&(i.hide.event&&(M.bind("mouseleave"+N,function(a){(a.relatedTarget||a.target)!==g.show[0]&&s.hide(a)}),O.target.bind("mouseenter"+N+" mouseleave"+N,function(a){P.onTarget=a.type==="mouseenter"})),g.document.bind("mousemove"+N,function(a){s.rendered&&P.onTarget&&!M.hasClass(z)&&M[0].offsetWidth>0&&s.reposition(a||v)}))),(c.adjust.resize||g.viewport.length)&&(d.event.special.resize?g.viewport:g.window).bind("resize"+N,o),(g.viewport.length||k&&M.css("position")==="fixed")&&g.viewport.bind("scroll"+N,o)}function _(){var c=[i.show.target[0],i.hide.target[0],s.rendered&&O.tooltip[0],i.position.container[0],i.position.viewport[0],i.position.container.closest("html")[0],a,b];s.rendered?d([]).pushStack(d.grep(c,function(a){return typeof a=="object"})).unbind(N):i.show.target.unbind(N+"-create")}var s=this,E=b.body,J=x+"-"+q,K=0,L=0,M=d(),N=".qtip-"+q,O,P;s.id=q,s.rendered=f,s.destroyed=f,s.elements=O={target:h},s.timers={img:{}},s.options=i,s.checks={},s.plugins={},s.cache=P={event:{},target:d(),disabled:f,attr:r,onTarget:f,lastClass:""},s.checks.builtin={"^id$":function(a,b,c){var g=c===e?t.nextid:c,h=x+"-"+g;g!==f&&g.length>0&&!d("#"+h).length&&(M[0].id=h,O.content[0].id=h+"-content",O.title[0].id=h+"-title")},"^content.text$":function(a,b,c){Y(c)},"^content.title.text$":function(a,b,c){if(!c)return T();!O.title&&c&&V(),X(c)},"^content.title.button$":function(a,b,c){W(c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(a[b]=new u.Corner(c))},"^position.container$":function(a,b,c){s.rendered&&M.appendTo(c)},"^show.ready$":function(){s.rendered?s.toggle(e):s.render(1)},"^style.classes$":function(a,b,c){M.attr("class",x+" qtip "+c)},"^style.widget|content.title":S,"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){M[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var a=i.position;M.attr("tracking",a.target==="mouse"&&a.adjust.mouse),_(),Z()}},d.extend(s,{render:function(a){if(s.rendered)return s;var b=i.content.text,c=i.content.title.text,g=i.position;return d.attr(h[0],"aria-describedby",J),M=O.tooltip=d("
    ",{id:J,"class":x+" qtip "+B+" "+i.style.classes+" "+x+"-pos-"+i.position.my.abbrev(),width:i.style.width||"",height:i.style.height||"",tracking:g.target==="mouse"&&g.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":f,"aria-describedby":J+"-content","aria-hidden":e}).toggleClass(z,P.disabled).data("qtip",s).appendTo(i.position.container).append(O.content=d("
    ",{"class":x+"-content",id:J+"-content","aria-atomic":e})),s.rendered=-1,L=1,K=1,c&&(V(),d.isFunction(c)||X(c,f)),d.isFunction(b)||Y(b,f),s.rendered=e,S(),d.each(i.events,function(a,b){d.isFunction(b)&&M.bind(a==="toggle"?"tooltipshow tooltiphide":"tooltip"+a,b)}),d.each(u,function(){this.initialize==="render"&&this(s)}),Z(),M.queue("fx",function(b){R("render"),L=0,K=0,s.redraw(),(i.show.ready||a)&&s.toggle(e,P.event,f),b()}),s},get:function(a){var b,c;switch(a.toLowerCase()){case"dimensions":b={height:M.outerHeight(),width:M.outerWidth()};break;case"offset":b=u.offset(M,i.position.container);break;default:c=Q(a.toLowerCase()),b=c[0][c[1]],b=b.precedance?b.string():b}return b},set:function(a,b){function n(a,b){var c,d,e;for(c in l)for(d in l[c])if(e=(new RegExp(d,"i")).exec(a))b.push(e),l[c][d].apply(s,b)}var c=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,h=/^content\.(title|attr)|style/i,j=f,k=f,l=s.checks,m;return"string"==typeof a?(m=a,a={},a[m]=b):a=d.extend(e,{},a),d.each(a,function(b,e){var f=Q(b.toLowerCase()),g;g=f[0][f[1]],f[0][f[1]]="object"==typeof e&&e.nodeType?d(e):e,a[b]=[f[0],f[1],e,g],j=c.test(b)||j,k=h.test(b)||k}),I(i),K=L=1,d.each(a,n),K=L=0,s.rendered&&M[0].offsetWidth>0&&(j&&s.reposition(i.position.target==="mouse"?g:P.event),k&&s.redraw()),s},toggle:function(a,c){function t(){a?(d.browser.msie&&M[0].style.removeAttribute("filter"),M.css("overflow",""),"string"==typeof h.autofocus&&d(h.autofocus,M).focus(),h.target.trigger("qtip-"+q+"-inactive")):M.css({display:"",visibility:"",opacity:"",left:"",top:""}),R(a?"visible":"hidden")}if(!s.rendered)return a?s.render(1):s;var g=a?"show":"hide",h=i[g],j=i[a?"hide":"show"],k=i.position,l=i.content,m=M[0].offsetWidth>0,n=a||h.target.length===1,o=!c||h.target.length<2||P.target[0]===c.target,p,r;(typeof a).search("boolean|number")&&(a=!m);if(!M.is(":animated")&&m===a&&o)return s;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(P.event.type)&&i.show.target.add(c.target).length===i.show.target.length&&M.has(c.relatedTarget).length)return s;P.event=d.extend({},c)}return R(g,[90])?(d.attr(M[0],"aria-hidden",!a),a?(P.origin=d.extend({},v),s.focus(c),d.isFunction(l.text)&&Y(l.text,f),d.isFunction(l.title.text)&&X(l.title.text,f),!G&&k.target==="mouse"&&k.adjust.mouse&&(d(b).bind("mousemove.qtip",function(a){v={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),G=e),s.reposition(c,arguments[2]),!h.solo||d(A,h.solo).not(M).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(s.timers.show),delete P.origin,G&&!d(A+'[tracking="true"]:visible',h.solo).not(M).length&&(d(b).unbind("mousemove.qtip"),G=f),s.blur(c)),h.effect===f||n===f?(M[g](),t.call(M)):d.isFunction(h.effect)?(M.stop(1,1),h.effect.call(M,s),M.queue("fx",function(a){t(),a()})):M.fadeTo(90,a?1:0,t),a&&h.target.trigger("qtip-"+q+"-inactive"),s):s},show:function(a){return s.toggle(e,a)},hide:function(a){return s.toggle(f,a)},focus:function(a){if(!s.rendered)return s;var b=d(A),c=parseInt(M[0].style.zIndex,10),e=t.zindex+b.length,f=d.extend({},a),g;return M.hasClass(C)||R("focus",[e],f)&&(c!==e&&(b.each(function(){this.style.zIndex>c&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+C).qtip("blur",f)),M.addClass(C)[0].style.zIndex=e),s},blur:function(a){return M.removeClass(C),R("blur",[M.css("zIndex")],a),s},reposition:function(c,e){if(!s.rendered||K)return s;K=1;var g=i.position.target,h=i.position,j=h.my,k=h.at,q=h.adjust,r=q.method.split(" "),t=M.outerWidth(),w=M.outerHeight(),x=0,y=0,z=M.css("position")==="fixed",A=h.viewport,B={left:0,top:0},C=h.container,D=M[0].offsetWidth>0,E,F,G;if(d.isArray(g)&&g.length===2)k={x:m,y:l},B={left:g[0],top:g[1]};else if(g==="mouse"&&(c&&c.pageX||P.event.pageX))k={x:m,y:l},c=(c&&(c.type==="resize"||c.type==="scroll")?P.event:c&&c.pageX&&c.type==="mousemove"?c:v&&v.pageX&&(q.mouse||!c||!c.pageX)?{pageX:v.pageX,pageY:v.pageY}:!q.mouse&&P.origin&&P.origin.pageX&&i.show.distance?P.origin:c)||c||P.event||v||{},B={top:c.pageY,left:c.pageX};else{g==="event"&&c&&c.target&&c.type!=="scroll"&&c.type!=="resize"?P.target=d(c.target):g!=="event"&&(P.target=d(g.jquery?g:O.target)),g=P.target,g=d(g).eq(0);if(g.length===0)return s;g[0]===b||g[0]===a?(x=u.iOS?a.innerWidth:g.width(),y=u.iOS?a.innerHeight:g.height(),g[0]===a&&(B={top:(A||g).scrollTop(),left:(A||g).scrollLeft()})):u.imagemap&&g.is("area")?E=u.imagemap(s,g,k,u.viewport?r:f):u.svg&&typeof g[0].xmlbase=="string"?E=u.svg(s,g,k,u.viewport?r:f):(x=g.outerWidth(),y=g.outerHeight(),B=u.offset(g,C)),E&&(x=E.width,y=E.height,F=E.offset,B=E.position);if(u.iOS>3.1&&u.iOS<4.1||u.iOS>=4.3&&u.iOS<4.33||!u.iOS&&z)G=d(a),B.left-=G.scrollLeft(),B.top-=G.scrollTop();B.left+=k.x===o?x:k.x===p?x/2:0,B.top+=k.y===n?y:k.y===p?y/2:0}return B.left+=q.x+(j.x===o?-t:j.x===p?-t/2:0),B.top+=q.y+(j.y===n?-w:j.y===p?-w/2:0),u.viewport?(B.adjusted=u.viewport(s,B,h,x,y,t,w),F&&B.adjusted.left&&(B.left+=F.left),F&&B.adjusted.top&&(B.top+=F.top)):B.adjusted={left:0,top:0},R("move",[B,A.elem||A],c)?(delete B.adjusted,e===f||!D||isNaN(B.left)||isNaN(B.top)||g==="mouse"||!d.isFunction(h.effect)?M.css(B):d.isFunction(h.effect)&&(h.effect.call(M,s,d.extend({},B)),M.queue(function(a){d(this).css({opacity:"",height:""}),d.browser.msie&&this.style.removeAttribute("filter"),a()})),K=0,s):s},redraw:function(){if(s.rendered<1||L)return s;var a=i.style,b=i.position.container,c,d,e,f;return L=1,R("redraw"),a.height&&M.css(k,a.height),a.width?M.css(j,a.width):(M.css(j,"").appendTo(H),d=M.width(),d%2<1&&(d+=1),e=M.css("max-width")||"",f=M.css("min-width")||"",c=(e+f).indexOf("%")>-1?b.width()/100:0,e=(e.indexOf("%")>-1?c:1)*parseInt(e,10)||d,f=(f.indexOf("%")>-1?c:1)*parseInt(f,10)||0,d=e+f?Math.min(Math.max(d,f),e):d,M.css(j,Math.round(d)).appendTo(b)),R("redrawn"),L=0,s},disable:function(a){return"boolean"!=typeof a&&(a=!M.hasClass(z)&&!P.disabled),s.rendered?(M.toggleClass(z,a),d.attr(M[0],"aria-disabled",a)):P.disabled=!!a,s},enable:function(){return s.disable(f)},destroy:function(){var a=h[0],b=d.attr(a,F),c=h.data("qtip");s.destroyed=e,s.rendered&&(M.stop(1,0).remove(),d.each(s.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(s.timers.show),clearTimeout(s.timers.hide),_();if(!c||s===c)d.removeData(a,"qtip"),i.suppress&&b&&(d.attr(a,"title",b),h.removeAttr(F)),h.removeAttr("aria-describedby");return h.unbind(".qtip-"+q),delete w[s.id],h}})}function K(a,c){var h,i,j,k,l,m=d(this),n=d(b.body),o=this===b?n:m,p=m.metadata?m.metadata(c.metadata):g,q=c.metadata.type==="html5"&&p?p[c.metadata.name]:g,r=m.data(c.metadata.name||"qtipopts");try{r=typeof r=="string"?d.parseJSON(r):r}catch(s){}k=d.extend(e,{},t.defaults,c,typeof r=="object"?I(r):g,I(q||p)),i=k.position,k.id=a;if("boolean"==typeof k.content.text){j=m.attr(k.content.attr);if(k.content.attr!==f&&j)k.content.text=j;else return f}i.container.length||(i.container=n),i.target===f&&(i.target=o),k.show.target===f&&(k.show.target=o),k.show.solo===e&&(k.show.solo=i.container.closest("body")),k.hide.target===f&&(k.hide.target=o),k.position.viewport===e&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new u.Corner(i.at),i.my=new u.Corner(i.my);if(d.data(this,"qtip"))if(k.overwrite)m.qtip("destroy");else if(k.overwrite===f)return f;return k.suppress&&(l=d.attr(this,"title"))&&d(this).removeAttr("title").attr(F,l).attr("title",""),h=new J(m,k,a,!!j),d.data(this,"qtip",h),m.bind("remove.qtip-"+a+" removeqtip.qtip-"+a,function(){h.destroy()}),h}function L(a){var b=this,c=a.elements.tooltip,g=a.options.content.ajax,h=t.defaults.content.ajax,i=".qtip-ajax",j=/)<[^<]*)*<\/script>/gi,k=e,l=f,m;a.checks.ajax={"^content.ajax":function(a,d,e){d==="ajax"&&(g=e),d==="once"?b.init():g&&g.url?b.load():c.unbind(i)}},d.extend(b,{init:function(){return g&&g.url&&c.unbind(i)[g.once?"one":"bind"]("tooltipshow"+i,b.load),b},load:function(c){function r(){var b;if(a.destroyed)return;k=f,p&&(l=e,a.show(c.originalEvent)),(b=h.complete||g.complete)&&d.isFunction(b)&&b.apply(g.context||a,arguments)}function s(b,c,e){var f;if(a.destroyed)return;o&&"string"==typeof b&&(b=d("
    ").append(b.replace(j,"")).find(o)),(f=h.success||g.success)&&d.isFunction(f)?f.call(g.context||a,b,c,e):a.set("content.text",b)}function t(b,c,d){if(a.destroyed||b.status===0)return;a.set("content.text",c+": "+d)}if(l){l=f;return}var i=g.url.lastIndexOf(" "),n=g.url,o,p=!g.loading&&k;if(p)try{c.preventDefault()}catch(q){}else if(c&&c.isDefaultPrevented())return b;m&&m.abort&&m.abort(),i>-1&&(o=n.substr(i),n=n.substr(0,i)),m=d.ajax(d.extend({error:h.error||t,context:a},g,{url:n,success:s,complete:r}))},destroy:function(){m&&m.abort&&m.abort(),a.destroyed=e}}),b.init()}function M(a,b,c){var d=Math.ceil(b/2),e=Math.ceil(c/2),f={bottomright:[[0,0],[b,c],[b,0]],bottomleft:[[0,0],[b,0],[0,c]],topright:[[0,c],[b,0],[b,c]],topleft:[[0,0],[0,c],[b,c]],topcenter:[[0,c],[d,0],[b,c]],bottomcenter:[[0,0],[b,0],[d,c]],rightcenter:[[0,0],[b,e],[0,c]],leftcenter:[[b,0],[b,c],[0,e]]};return f.lefttop=f.bottomright,f.righttop=f.bottomleft,f.leftbottom=f.topright,f.rightbottom=f.topleft,f[a.string()]}function N(a,b){function D(a){var b=v.is(":visible");v.show(),a(),v.toggle(b)}function E(){x.width=r.height,x.height=r.width}function F(){x.width=r.width,x.height=r.height}function G(b,d,g,j){if(!t.tip)return;var k=q.corner.clone(),u=g.adjusted,v=a.options.position.adjust.method.split(" "),x=v[0],y=v[1]||v[0],z={left:f,top:f,x:0,y:0},A,B={},C;q.corner.fixed!==e&&(x===s&&k.precedance===h&&u.left&&k.y!==p?k.precedance=k.precedance===h?i:h:x!==s&&u.left&&(k.x=k.x===p?u.left>0?m:o:k.x===m?o:m),y===s&&k.precedance===i&&u.top&&k.x!==p?k.precedance=k.precedance===i?h:i:y!==s&&u.top&&(k.y=k.y===p?u.top>0?l:n:k.y===l?n:l),k.string()!==w.corner.string()&&(w.top!==u.top||w.left!==u.left)&&q.update(k,f)),A=q.position(k,u),A[k.x]+=I(k,k.x),A[k.y]+=I(k,k.y),A.right!==c&&(A.left=-A.right),A.bottom!==c&&(A.top=-A.bottom),A.user=Math.max(0,r.offset);if(z.left=x===s&&!!u.left)k.x===p?B["margin-left"]=z.x=A["margin-left"]-u.left:(C=A.right!==c?[u.left,-A.left]:[-u.left,A.left],(z.x=Math.max(C[0],C[1]))>C[0]&&(g.left-=u.left,z.left=f),B[A.right!==c?o:m]=z.x);if(z.top=y===s&&!!u.top)k.y===p?B["margin-top"]=z.y=A["margin-top"]-u.top:(C=A.bottom!==c?[u.top,-A.top]:[-u.top,A.top],(z.y=Math.max(C[0],C[1]))>C[0]&&(g.top-=u.top,z.top=f),B[A.bottom!==c?n:l]=z.y);t.tip.css(B).toggle(!(z.x&&z.y||k.x===p&&z.y||k.y===p&&z.x)),g.left-=A.left.charAt?A.user:x!==s||z.top||!z.left&&!z.top?A.left:0,g.top-=A.top.charAt?A.user:y!==s||z.left||!z.left&&!z.top?A.top:0,w.left=u.left,w.top=u.top,w.corner=k.clone()}function H(){var b=r.corner,c=a.options.position,d=c.at,g=c.my.string?c.my.string():c.my;return b===f||g===f&&d===f?f:(b===e?q.corner=new u.Corner(g):b.string||(q.corner=new u.Corner(b),q.corner.fixed=e),w.corner=new u.Corner(q.corner.string()),q.corner.string()!=="centercenter")}function I(a,b,c){b=b?b:a[a.precedance];var d=t.titlebar&&a.y===l,e=d?t.titlebar:v,f="border-"+b+"-width",g=function(a){return parseInt(a.css(f),10)},h;return D(function(){h=(c?g(c):g(t.content)||g(e)||g(v))||0}),h}function J(a){var b=t.titlebar&&a.y===l,c=b?t.titlebar:t.content,e=d.browser.mozilla,f=e?"-moz-":d.browser.webkit?"-webkit-":"",g="border-radius-"+a.y+a.x,h="border-"+a.y+"-"+a.x+"-radius",i=function(a){return parseInt(c.css(a),10)||parseInt(v.css(a),10)},j;return D(function(){j=i(h)||i(f+h)||i(f+g)||i(g)||0}),j}function K(a){function z(a,b,c){var d=a.css(b)||n;return c&&d===a.css(c)?f:j.test(d)?f:d}var b,c,g,h=t.tip.css("cssText",""),i=a||q.corner,j=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,k="border-"+i[i.precedance]+"-color",m="background-color",n="transparent",o=" !important",s=t.titlebar,u=s&&(i.y===l||i.y===p&&h.position().top+x.height/2+r.offset-1,f=c*(e?.5:1),g=Math.pow,h=Math.round,l,m,n,o=Math.sqrt(g(f,2)+g(d,2)),q=[z/f*o,z/d*o];return q[2]=Math.sqrt(g(q[0],2)-g(z,2)),q[3]=Math.sqrt(g(q[1],2)-g(z,2)),l=o+q[2]+q[3]+(e?0:q[0]),m=l/o,n=[h(m*d),h(m*c)],{height:n[b?0:1],width:n[b?1:0]}}function N(a,b,c){return"'}var q=this,r=a.options.style.tip,t=a.elements,v=t.tooltip,w={top:0,left:0},x={width:r.width,height:r.height},y={},z=r.border||0,A=".qtip-tip",B=!!(d("")[0]||{}).getContext,C;q.corner=g,q.mimic=g,q.border=z,q.offset=r.offset,q.size=x,a.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){q.init()||q.destroy(),a.reposition()},"^style.tip.(height|width)$":function(){x={width:r.width,height:r.height},q.create(),q.update(),a.reposition()},"^content.title.text|style.(classes|widget)$":function(){t.tip&&t.tip.length&&q.update()}},d.extend(q,{init:function(){var a=H()&&(B||d.browser.msie);return a&&(q.create(),q.update(),v.unbind(A).bind("tooltipmove"+A,G),B||v.bind("tooltipredraw tooltipredrawn",function(a){a.type==="tooltipredraw"?(C=t.tip.html(),t.tip.html("")):t.tip.html(C)})),a},create:function(){var a=x.width,b=x.height,c;t.tip&&t.tip.remove(),t.tip=d("
    ",{"class":"ui-tooltip-tip"}).css({width:a,height:b}).prependTo(v),B?d("").appendTo(t.tip)[0].getContext("2d").save():(c=N("shape",'coordorigin="0,0"',"position:absolute;"),t.tip.html(c+c),d("*",t.tip).bind("click mousedown",function(a){a.stopPropagation()}))},update:function(a,b){var c=t.tip,j=c.children(),k=x.width,s=x.height,A=r.mimic,C=Math.round,D,G,H,J,O;a||(a=w.corner||q.corner),A===f?A=a:(A=new u.Corner(A),A.precedance=a.precedance,A.x==="inherit"?A.x=a.x:A.y==="inherit"?A.y=a.y:A.x===A.y&&(A[a.precedance]=a[a.precedance])),D=A.precedance,a.precedance===h?E():F(),t.tip.css({width:k=x.width,height:s=x.height}),K(a),y.border!=="transparent"?(z=I(a,g),r.border===0&&z>0&&(y.fill=y.border),q.border=z=r.border!==e?r.border:z):q.border=z=0,H=M(A,k,s),q.size=O=L(a),c.css(O),a.precedance===i?J=[C(A.x===m?z:A.x===o?O.width-k-z:(O.width-k)/2),C(A.y===l?O.height-s:0)]:J=[C(A.x===m?O.width-k:0),C(A.y===l?z:A.y===n?O.height-s-z:(O.height-s)/2)],B?(j.attr(O),G=j[0].getContext("2d"),G.restore(),G.save(),G.clearRect(0,0,3e3,3e3),G.fillStyle=y.fill,G.strokeStyle=y.border,G.lineWidth=z*2,G.lineJoin="miter",G.miterLimit=100,G.translate(J[0],J[1]),G.beginPath(),G.moveTo(H[0][0],H[0][1]),G.lineTo(H[1][0],H[1][1]),G.lineTo(H[2][0],H[2][1]),G.closePath(),z&&(v.css("background-clip")==="border-box"&&(G.strokeStyle=y.fill,G.stroke()),G.strokeStyle=y.border,G.stroke()),G.fill()):(H="m"+H[0][0]+","+H[0][1]+" l"+H[1][0]+","+H[1][1]+" "+H[2][0]+","+H[2][1]+" xe",J[2]=z&&/^(r|b)/i.test(a.string())?parseFloat(d.browser.version,10)===8?2:1:0,j.css({coordsize:k+z+" "+(s+z),antialias:""+(A.string().indexOf(p)>-1),left:J[0],top:J[1],width:k+z,height:s+z}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k+z+" "+(s+z),path:H,fillcolor:y.fill,filled:!!a,stroked:!a}).toggle(!!z||!!a),!a&&b.html()===""&&b.html(N("stroke",'weight="'+z*2+'px" color="'+y.border+'" miterlimit="1000" joinstyle="miter"'))})),b!==f&&q.position(a)},position:function(a){var b=t.tip,c={},e=Math.max(0,r.offset),g,n,o;return r.corner===f||!b?f:(a=a||q.corner,g=a.precedance,n=L(a),o=[a.x,a.y],g===h&&o.reverse(),d.each(o,function(b,d){var f,h,o;d===p?(f=g===i?m:l,c[f]="50%",c["margin-"+f]=-Math.round(n[g===i?j:k]/2)+e):(f=I(a,d),h=I(a,d,t.content),o=J(a),c[d]=b?h:e+(o>f?o:-f))}),c[a[g]]-=n[g===h?j:k],b.css({top:"",bottom:"",left:"",right:"",margin:""}).css(c),c)},destroy:function(){t.tip&&t.tip.remove(),t.tip=!1,v.unbind(A)}}),q.init()}function O(c){function s(){q=d(p,j).not("[disabled]").map(function(){return typeof this.focus=="function"?this:null})}function t(a){q.length<1&&a.length?a.not("body").blur():q.first().focus()}function v(a){var b=d(a.target),c=b.closest(".qtip"),e;e=c.length<1?f:parseInt(c[0].style.zIndex,10)>parseInt(j[0].style.zIndex,10),!e&&d(a.target).closest(A)[0]!==j[0]&&t(b)}var g=this,h=c.options.show.modal,i=c.elements,j=i.tooltip,k="#qtip-overlay",l=".qtipmodal",m=l+c.id,n="is-modal-qtip",o=d(b.body),p=u.modal.focusable.join(","),q={},r;c.checks.modal={"^show.modal.(on|blur)$":function(){g.init(),i.overlay.toggle(j.is(":visible"))},"^content.text$":function(){s()}},d.extend(g,{init:function(){return h.on?(r=g.create(),j.attr(n,e).css("z-index",u.modal.zindex+d(A+"["+n+"]").length).unbind(l).unbind(m).bind("tooltipshow"+l+" tooltiphide"+l,function(a,b,c){var e=a.originalEvent;if(a.target===j[0])if(e&&a.type==="tooltiphide"&&/mouse(leave|enter)/.test(e.type)&&d(e.relatedTarget).closest(r[0]).length)try{a.preventDefault()}catch(f){}else(!e||e&&!e.solo)&&g[a.type.replace("tooltip","")](a,c)}).bind("tooltipfocus"+l,function(a){if(a.isDefaultPrevented()||a.target!==j[0])return;var b=d(A).filter("["+n+"]"),c=u.modal.zindex+b.length,e=parseInt(j[0].style.zIndex,10);r[0].style.zIndex=c-2,b.each(function(){this.style.zIndex>e&&(this.style.zIndex-=1)}),b.end().filter("."+C).qtip("blur",a.originalEvent),j.addClass(C)[0].style.zIndex=c;try{a.preventDefault()}catch(f){}}).bind("tooltiphide"+l,function(a){a.target===j[0]&&d("["+n+"]").filter(":visible").not(j).last().qtip("focus",a)}),h.escape&&d(b).unbind(m).bind("keydown"+m,function(a){a.keyCode===27&&j.hasClass(C)&&c.hide(a)}),h.blur&&i.overlay.unbind(m).bind("click"+m,function(a){j.hasClass(C)&&c.hide(a)}),s(),g):g},create:function(){function c(){r.css({height:d(a).height(),width:d(a).width()})}var b=d(k);return b.length?i.overlay=b.insertAfter(d(A).last()):(r=i.overlay=d("
    ",{id:k.substr(1),html:"
    ",mousedown:function(){return f}}).hide().insertAfter(d(A).last()),d(a).unbind(l).bind("resize"+l,c),c(),r)},toggle:function(a,b,c){if(a&&a.isDefaultPrevented())return g;var i=h.effect,k=b?"show":"hide",l=r.is(":visible"),p=d("["+n+"]").filter(":visible").not(j),q;return r||(r=g.create()),r.is(":animated")&&l===b||!b&&p.length?g:(b?(r.css({left:0,top:0}),r.toggleClass("blurs",h.blur),h.stealfocus!==f&&(o.bind("focusin"+m,v),t(d("body :focus")))):o.unbind("focusin"+m),r.stop(e,f),d.isFunction(i)?i.call(r,b):i===f?r[k]():r.fadeTo(parseInt(c,10)||90,b?1:0,function(){b||d(this).hide()}),b||r.queue(function(a){r.css({left:"",top:""}),a()}),g)},show:function(a,b){return g.toggle(a,e,b)},hide:function(a,b){return g.toggle(a,f,b)},destroy:function(){var a=r;return a&&(a=d("["+n+"]").not(j).length<1,a?(i.overlay.remove(),d(b).unbind(l)):i.overlay.unbind(l+c.id),o.undelegate("*","focusin"+m)),j.removeAttr(n).unbind(l)}}),g.init()}function P(a){var b=this,c=a.elements,e=c.tooltip,f=".bgiframe-"+a.id;d.extend(b,{init:function(){c.bgiframe=d(''),c.bgiframe.appendTo(e),e.bind("tooltipmove"+f,b.adjust)},adjust:function(){var b=a.get("dimensions"),d=a.plugins.tip,f=c.tip,g,h;h=parseInt(e.css("border-left-width"),10)||0,h={left:-h,top:-h},d&&f&&(g=d.corner.precedance==="x"?["width","left"]:["height","top"],h[g[1]]-=f[g[0]]()),c.bgiframe.css(h).css(b)},destroy:function(){c.bgiframe.remove(),e.unbind(f)}}),b.init()}var e=!0,f=!1,g=null,h="x",i="y",j="width",k="height",l="top",m="left",n="bottom",o="right",p="center",q="flip",r="flipinvert",s="shift",t,u,v,w={},x="ui-tooltip",y="ui-widget",z="ui-state-disabled",A="div.qtip."+x,B=x+"-default",C=x+"-focus",D=x+"-hover",E="_replacedByqTip",F="oldtitle",G,H;H=d("
    ",{id:"qtip-rcontainer"}),d(function(){H.appendTo(b.body)}),t=d.fn.qtip=function(a,b,h){var i=(""+a).toLowerCase(),j=g,k=d.makeArray(arguments).slice(1),l=k[k.length-1],m=this[0]?d.data(this[0],"qtip"):g;if(!arguments.length&&m||i==="api")return m;if("string"==typeof a)return this.each(function(){var a=d.data(this,"qtip");if(!a)return e;l&&l.timeStamp&&(a.cache.event=l);if(i!=="option"&&i!=="options"||!b)a[i]&&a[i].apply(a[i],k);else if(d.isPlainObject(b)||h!==c)a.set(b,h);else return j=a.get(b),f}),j!==g?j:this;if("object"==typeof a||!arguments.length)return m=I(d.extend(e,{},a)),t.bind.call(this,m,l)},t.bind=function(a,b){return this.each(function(g){function n(a){function b(){l.render(typeof a=="object"||h.show.ready),i.show.add(i.hide).unbind(k)}if(l.cache.disabled)return f;l.cache.event=d.extend({},a),l.cache.target=a?d(a.target):[c],h.show.delay>0?(clearTimeout(l.timers.show),l.timers.show=setTimeout(b,h.show.delay),j.show!==j.hide&&i.hide.bind(j.hide,function(){clearTimeout(l.timers.show)})):b()}var h,i,j,k,l,m;m=d.isArray(a.id)?a.id[g]:a.id,m=!m||m===f||m.length<1||w[m]?t.nextid++:w[m]=m,k=".qtip-"+m+"-create",l=K.call(this,m,a);if(l===f)return e;h=l.options,d.each(u,function(){this.initialize==="initialize"&&this(l)}),i={show:h.show.target,hide:h.hide.target},j={show:d.trim(""+h.show.event).replace(/ /g,k+" ")+k,hide:d.trim(""+h.hide.event).replace(/ /g,k+" ")+k},/mouse(over|enter)/i.test(j.show)&&!/mouse(out|leave)/i.test(j.hide)&&(j.hide+=" mouseleave"+k),i.show.bind("mousemove"+k,function(a){v={pageX:a.pageX,pageY:a.pageY,type:"mousemove"},l.cache.onTarget=e}),i.show.bind(j.show,n),(h.show.ready||h.prerender)&&n(b)})},u=t.plugins={Corner:function(a){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,p).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var b=a.charAt(0);this.precedance=b==="t"||b==="b"?i:h,this.string=function(){return this.precedance===i?this.y+this.x:this.x+this.y},this.abbrev=function(){var a=this.x.substr(0,1),b=this.y.substr(0,1);return a===b?a:this.precedance===i?b+a:a+b},this.invertx=function(a){this.x=this.x===m?o:this.x===o?m:a||this.x},this.inverty=function(a){this.y=this.y===l?n:this.y===n?l:a||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(a,b){function j(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}var c=a.offset(),e=a.closest("body")[0],f=b,g,h,i;if(f){do f.css("position")!=="static"&&(h=f.position(),c.left-=h.left+(parseInt(f.css("borderLeftWidth"),10)||0)+(parseInt(f.css("marginLeft"),10)||0),c.top-=h.top+(parseInt(f.css("borderTopWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0),!g&&(i=f.css("overflow"))!=="hidden"&&i!=="visible"&&(g=f));while((f=d(f[0].offsetParent)).length);g&&g[0]!==e&&j(g,1)}return c},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||f,fn:{attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,F):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(F,b))}return d.fn["attr"+E].apply(this,arguments)},clone:function(a){var b=d([]),c="title",e=d.fn["clone"+E].apply(this,arguments);return a||e.filter("["+F+"]").attr("title",function(){return d.attr(this,F)}).removeAttr(F),e}}},d.each(u.fn,function(a,b){if(!b||d.fn[a+E])return e;var c=d.fn[a+E]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+E]=d.cleanData,d.cleanData=function(a){for(var b=0,e;(e=a[b])!==c;b++)try{d(e).triggerHandler("removeqtip")}catch(f){}d["cleanData"+E](a)}),t.version="@VERSION",t.nextid=0,t.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),t.zindex=15e3,t.defaults={prerender:f,id:f,overwrite:e,suppress:e,content:{text:e,attr:"title",title:{text:f,button:f}},position:{my:"top left",at:"bottom right",target:f,container:f,viewport:f,adjust:{x:0,y:0,mouse:e,resize:e,method:"flip flip"},effect:function(a,b,c){d(this).animate(b,{duration:200,queue:f})}},show:{target:f,event:"mouseenter",effect:e,delay:90,solo:f,ready:f,autofocus:f},hide:{target:f,event:"mouseleave",effect:e,delay:0,fixed:f,inactive:f,leave:"window",distance:f},style:{classes:"",widget:f,width:f,height:f,def:e},events:{render:g,move:g,show:g,hide:g,toggle:g,visible:g,hidden:g,focus:g,blur:g}},u.svg=function(a,c,e,f){var g=d(b),h=c[0],i={width:0,height:0,position:{top:1e10,left:1e10}},j,k,l,m,n;while(!h.getBBox)h=h.parentNode;if(h.getBBox&&h.parentNode){j=h.getBBox(),k=h.getScreenCTM(),l=h.farthestViewportElement||h;if(!l.createSVGPoint)return i;m=l.createSVGPoint(),m.x=j.x,m.y=j.y,n=m.matrixTransform(k),i.position.left=n.x,i.position.top=n.y,m.x+=j.width,m.y+=j.height,n=m.matrixTransform(k),i.width=n.x-i.position.left,i.height=n.y-i.position.top,i.position.left+=g.scrollLeft(),i.position.top+=g.scrollTop()}return i},u.ajax=function(a){var b=a.plugins.ajax;return"object"==typeof b?b:a.plugins.ajax=new L(a)},u.ajax.initialize="render",u.ajax.sanitize=function(a){var b=a.content,c;b&&"ajax"in b&&(c=b.ajax,typeof c!="object"&&(c=a.content.ajax={url:c}),"boolean"!=typeof c.once&&c.once&&(c.once=!!c.once))},d.extend(e,t.defaults,{content:{ajax:{loading:e,once:e}}}),u.tip=function(a){var b=a.plugins.tip;return"object"==typeof b?b:a.plugins.tip=new N(a)},u.tip.initialize="render",u.tip.sanitize=function(a){var b=a.style,c;b&&"tip"in b&&(c=a.style.tip,typeof c!="object"&&(a.style.tip={corner:c}),/string|boolean/i.test(typeof c.corner)||(c.corner=e),typeof c.width!="number"&&delete c.width,typeof c.height!="number"&&delete c.height,typeof c.border!="number"&&c.border!==e&&delete c.border,typeof c.offset!="number"&&delete c.offset)},d.extend(e,t.defaults,{style:{tip:{corner:e,mimic:f,width:6,height:6,border:e,offset:0}}}),u.modal=function(a){var b=a.plugins.modal;return"object"==typeof b?b:a.plugins.modal=new O(a)},u.modal.initialize="render",u.modal.sanitize=function(a){a.show&&(typeof a.show.modal!="object"?a.show.modal={on:!!a.show.modal}:typeof a.show.modal.on=="undefined"&&(a.show.modal.on=e))},u.modal.zindex=t.zindex-200,u.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],d.extend(e,t.defaults,{show:{modal:{on:f,effect:e,blur:e,stealfocus:e,escape:e}}}),u.viewport=function(c,d,e,f,g,q,t){function L(a,b,c,e,f,g,h,i,j){var k=d[f],l=w[a],m=y[a],n=c===s,o=-E.offset[f]+D.offset[f]+D["scroll"+f],q=l===f?j:l===g?-j:-j/2,t=m===f?i:m===g?-i:-i/2,u=G&&G.size?G.size[h]||0:0,v=G&&G.corner&&G.corner.precedance===a&&!n?u:0,x=o-k+v,z=k+j-D[h]-o+v,A=q-(w.precedance===a||l===w[b]?t:0)-(m===p?i/2:0);return n?(v=G&&G.corner&&G.corner.precedance===b?u:0,A=(l===f?1:-1)*q-v,d[f]+=x>0?x:z>0?-z:0,d[f]=Math.max(-E.offset[f]+D.offset[f]+(v&&G.corner[a]===p?G.offset:0),k-A,Math.min(Math.max(-E.offset[f]+D.offset[f]+D[h],k+A),d[f]))):(e*=c===r?2:0,x>0&&(l!==f||z>0)?(d[f]-=A+e,J["invert"+a](f)):z>0&&(l!==g||x>0)&&(d[f]-=(l===p?-A:A)+e,J["invert"+a](g)),d[f]z&&(d[f]=k,J=w.clone())),d[f]-k}var u=e.target,v=c.elements.tooltip,w=e.my,y=e.at,z=e.adjust,A=z.method.split(" "),B=A[0],C=A[1]||A[0],D=e.viewport,E=e.container,F=c.cache,G=c.plugins.tip,H={left:0,top:0},I,J,K;if(!D.jquery||u[0]===a||u[0]===b.body||z.method==="none")return H;I=v.css("position")==="fixed",D={elem:D,height:D[(D[0]===a?"h":"outerH")+"eight"](),width:D[(D[0]===a?"w":"outerW")+"idth"](),scrollleft:I?0:D.scrollLeft(),scrolltop:I?0:D.scrollTop(),offset:D.offset()||{left:0,top:0}},E={elem:E,scrollLeft:E.scrollLeft(),scrollTop:E.scrollTop(),offset:E.offset()||{left:0,top:0}};if(B!=="shift"||C!=="shift")J=w.clone();return H={left:B!=="none"?L(h,i,B,z.x,m,o,j,f,q):0,top:C!=="none"?L(i,h,C,z.y,l,n,k,g,t):0},J&&F.lastClass!==(K=x+"-pos-"+J.abbrev())&&v.removeClass(c.cache.lastClass).addClass(c.cache.lastClass=K),H},u.imagemap=function(a,b,c,e){function v(a,b,c){var d=0,e=1,f=1,g=0,h=0,i=a.width,j=a.height;while(i>0&&j>0&&e>0&&f>0){i=Math.floor(i/2),j=Math.floor(j/2),c.x===m?e=i:c.x===o?e=a.width-i:e+=Math.floor(i/2),c.y===l?f=j:c.y===n?f=a.height-j:f+=Math.floor(j/2),d=b.length;while(d--){if(b.length<2)break;g=b[d][0]-a.position.left,h=b[d][1]-a.position.top,(c.x===m&&g>=e||c.x===o&&g<=e||c.x===p&&(ga.width-e)||c.y===l&&h>=f||c.y===n&&h<=f||c.y===p&&(ha.height-f))&&b.splice(d,1)}}return{left:b[0][0],top:b[0][1]}}b.jquery||(b=d(b));var f=a.cache.areas={},g=(b[0].shape||b.attr("shape")).toLowerCase(),h=b[0].coords||b.attr("coords"),i=h.split(","),j=[],k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),q=k.offset(),r={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},s=0,t=0,u;q.left+=Math.ceil((k.outerWidth()-k.width())/2),q.top+=Math.ceil((k.outerHeight()-k.height())/2);if(g==="poly"){s=i.length;while(s--)t=[parseInt(i[--s],10),parseInt(i[s+1],10)],t[0]>r.position.right&&(r.position.right=t[0]),t[0]r.position.bottom&&(r.position.bottom=t[1]),t[1]', +closeClass:"simplemodal-close",escClose:!0,overlayClose:!1,fixed:!0,position:null,persist:!1,modal:!0,onOpen:null,onShow:null,onClose:null};b.modal.impl={d:{},init:function(a,d){if(this.d.data)return!1;n=b.browser.msie&&!b.support.boxModel;this.o=b.extend({},b.modal.defaults,d);this.zIndex=this.o.zIndex;this.occb=!1;if("object"===typeof a){if(a=a instanceof b?a:b(a),this.d.placeholder=!1,0").attr("id","simplemodal-placeholder").css({display:"none"})), +this.d.placeholder=!0,this.display=a.css("display"),!this.o.persist))this.d.orig=a.clone(!0)}else if("string"===typeof a||"number"===typeof a)a=b("
    ").html(a);else return alert("SimpleModal Error: Unsupported data type: "+typeof a),this;this.create(a);this.open();b.isFunction(this.o.onShow)&&this.o.onShow.apply(this,[this.d]);return this},create:function(a){this.getDimensions();if(this.o.modal&&m)this.d.iframe=b('').css(b.extend(this.o.iframeCss, +{display:"none",opacity:0,position:"fixed",height:h[0],width:h[1],zIndex:this.o.zIndex,top:0,left:0})).appendTo(this.o.appendTo);this.d.overlay=b("
    ").attr("id",this.o.overlayId).addClass("simplemodal-overlay").css(b.extend(this.o.overlayCss,{display:"none",opacity:this.o.opacity/100,height:this.o.modal?j[0]:0,width:this.o.modal?j[1]:0,position:"fixed",left:0,top:0,zIndex:this.o.zIndex+1})).appendTo(this.o.appendTo);this.d.container=b("
    ").attr("id",this.o.containerId).addClass("simplemodal-container").css(b.extend({position:this.o.fixed? +"fixed":"absolute"},this.o.containerCss,{display:"none",zIndex:this.o.zIndex+2})).append(this.o.close&&this.o.closeHTML?b(this.o.closeHTML).addClass(this.o.closeClass):"").appendTo(this.o.appendTo);this.d.wrap=b("
    ").attr("tabIndex",-1).addClass("simplemodal-wrap").css({height:"100%",outline:0,width:"100%"}).appendTo(this.d.container);this.d.data=a.attr("id",a.attr("id")||this.o.dataId).addClass("simplemodal-data").css(b.extend(this.o.dataCss,{display:"none"})).appendTo("body");this.setContainerDimensions(); +this.d.data.appendTo(this.d.wrap);(m||n)&&this.fixIE()},bindEvents:function(){var a=this;b("."+a.o.closeClass).bind("click.simplemodal",function(b){b.preventDefault();a.close()});a.o.modal&&a.o.close&&a.o.overlayClose&&a.d.overlay.bind("click.simplemodal",function(b){b.preventDefault();a.close()});l.bind("keydown.simplemodal",function(b){a.o.modal&&9===b.keyCode?a.watchTab(b):a.o.close&&a.o.escClose&&27===b.keyCode&&(b.preventDefault(),a.close())});k.bind("resize.simplemodal orientationchange.simplemodal", +function(){a.getDimensions();a.o.autoResize?a.setContainerDimensions():a.o.autoPosition&&a.setPosition();m||n?a.fixIE():a.o.modal&&(a.d.iframe&&a.d.iframe.css({height:h[0],width:h[1]}),a.d.overlay.css({height:j[0],width:j[1]}))})},unbindEvents:function(){b("."+this.o.closeClass).unbind("click.simplemodal");l.unbind("keydown.simplemodal");k.unbind(".simplemodal");this.d.overlay.unbind("click.simplemodal")},fixIE:function(){var a=this.o.position;b.each([this.d.iframe||null,!this.o.modal?null:this.d.overlay, +"fixed"===this.d.container.css("position")?this.d.container:null],function(b,f){if(f){var g=f[0].style;g.position="absolute";if(2>b)g.removeExpression("height"),g.removeExpression("width"),g.setExpression("height",'document.body.scrollHeight > document.body.clientHeight ? document.body.scrollHeight : document.body.clientHeight + "px"'),g.setExpression("width",'document.body.scrollWidth > document.body.clientWidth ? document.body.scrollWidth : document.body.clientWidth + "px"');else{var c,e;a&&a.constructor=== +Array?(c=a[0]?"number"===typeof a[0]?a[0].toString():a[0].replace(/px/,""):f.css("top").replace(/px/,""),c=-1===c.indexOf("%")?c+' + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"':parseInt(c.replace(/%/,""))+' * ((document.documentElement.clientHeight || document.body.clientHeight) / 100) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"',a[1]&&(e="number"===typeof a[1]? +a[1].toString():a[1].replace(/px/,""),e=-1===e.indexOf("%")?e+' + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"':parseInt(e.replace(/%/,""))+' * ((document.documentElement.clientWidth || document.body.clientWidth) / 100) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"')):(c='(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"', +e='(document.documentElement.clientWidth || document.body.clientWidth) / 2 - (this.offsetWidth / 2) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"');g.removeExpression("top");g.removeExpression("left");g.setExpression("top",c);g.setExpression("left",e)}}})},focus:function(a){var d=this,a=a&&-1!==b.inArray(a,["first","last"])?a:"first",f=b(":input:enabled:visible:"+a,d.d.wrap);setTimeout(function(){0c?c:dc?c:this.o.minHeight&&"auto"!==i&&fe?e:ae?e:this.o.minWidth&&"auto"!==c&&gd||g>a?"auto":"visible"});this.o.autoPosition&&this.setPosition()},setPosition:function(){var a,b;a=h[0]/2-this.d.container.outerHeight(!0)/2;b=h[1]/2-this.d.container.outerWidth(!0)/2;var f="fixed"!==this.d.container.css("position")?k.scrollTop():0;this.o.position&&"[object Array]"===Object.prototype.toString.call(this.o.position)?(a=f+(this.o.position[0]||a),b=this.o.position[1]|| +b):a=f+a;this.d.container.css({left:b,top:a})},watchTab:function(a){if(0' in the URL, then set this var +var preseededCurInstr = null; // if you passed in a 'curInstr=' in the URL, then set this var + +var rawInputLst = []; // a list of strings inputted by the user in response to raw_input or mouse_input events + +var myVisualizer = null; // singleton ExecutionVisualizer instance + + +function enterEditMode() { + $.bbq.pushState({ mode: 'edit' }, 2 /* completely override other hash strings to keep URL clean */); +} + +function enterDisplayNoFrillsMode() { + $.bbq.pushState({ mode: 'display_no_frills' }, 2 /* completely override other hash strings to keep URL clean */); +} + +var pyInputCodeMirror; // CodeMirror object that contains the input text + +function setCodeMirrorVal(dat) { + pyInputCodeMirror.setValue(dat.rtrim() /* kill trailing spaces */); + $('#urlOutput,#embedCodeOutput').val(''); + + // also scroll to top to make the UI more usable on smaller monitors + $(document).scrollTop(0); +} + + +$(document).ready(function() { + + $("#embedLinkDiv").hide(); + + pyInputCodeMirror = CodeMirror(document.getElementById('codeInputPane'), { + mode: 'python', + lineNumbers: true, + tabSize: 4, + indentUnit: 4, + // convert tab into four spaces: + extraKeys: {Tab: function(cm) {cm.replaceSelection(" ", "end");}} + }); + + pyInputCodeMirror.setSize(null, '420px'); + + + + // be friendly to the browser's forward and back buttons + // thanks to http://benalman.com/projects/jquery-bbq-plugin/ + $(window).bind("hashchange", function(e) { + appMode = $.bbq.getState('mode'); // assign this to the GLOBAL appMode + + if (appMode === undefined || appMode == 'edit') { + $("#pyInputPane").show(); + $("#pyOutputPane").hide(); + $("#embedLinkDiv").hide(); + + // destroy all annotation bubbles (NB: kludgy) + if (myVisualizer) { + myVisualizer.destroyAllAnnotationBubbles(); + } + } + else if (appMode == 'display') { + $("#pyInputPane").hide(); + $("#pyOutputPane").show(); + + $("#embedLinkDiv").show(); + + $('#executeBtn').html("Visualize execution"); + $('#executeBtn').attr('disabled', false); + + + // do this AFTER making #pyOutputPane visible, or else + // jsPlumb connectors won't render properly + myVisualizer.updateOutput(); + + // customize edit button click functionality AFTER rendering (NB: awkward!) + $('#pyOutputPane #editCodeLinkDiv').show(); + $('#pyOutputPane #editBtn').click(function() { + enterEditMode(); + }); + } + else if (appMode == 'display_no_frills') { + $("#pyInputPane").hide(); + $("#pyOutputPane").show(); + $("#embedLinkDiv").show(); + } + else { + assert(false); + } + + $('#urlOutput,#embedCodeOutput').val(''); // clear to avoid stale values + }); + + + function executeCode(forceStartingInstr) { + var backend_script = null; + if ($('#pythonVersionSelector').val() == '2') { + backend_script = python2_backend_script; + } + else if ($('#pythonVersionSelector').val() == '3') { + backend_script = python3_backend_script; + } + // experimental KRAZY MODE!!! + else if ($('#pythonVersionSelector').val() == '2crazy') { + backend_script = python2crazy_backend_script; + } + + if (!backend_script) { + alert('Error: This server is not configured to run Python ' + $('#pythonVersionSelector').val()); + return; + } + + $('#executeBtn').html("Please wait ... processing your code"); + $('#executeBtn').attr('disabled', true); + $("#pyOutputPane").hide(); + $("#embedLinkDiv").hide(); + + + // set up all options in a JS object + var options = {cumulative_mode: ($('#cumulativeModeSelector').val() == 'true'), + heap_primitives: ($('#heapPrimitivesSelector').val() == 'true'), + show_only_outputs: ($('#showOnlyOutputsSelector').val() == 'true'), + py_crazy_mode: ($('#pythonVersionSelector').val() == '2crazy')}; + + $.get(backend_script, + {user_script : pyInputCodeMirror.getValue(), + raw_input_json: rawInputLst.length > 0 ? JSON.stringify(rawInputLst) : '', + options_json: JSON.stringify(options)}, + function(dataFromBackend) { + var trace = dataFromBackend.trace; + + // don't enter visualize mode if there are killer errors: + if (!trace || + (trace.length == 0) || + (trace[trace.length - 1].event == 'uncaught_exception')) { + + if (trace.length == 1) { + var errorLineNo = trace[0].line - 1; /* CodeMirror lines are zero-indexed */ + if (errorLineNo !== undefined) { + // highlight the faulting line in pyInputCodeMirror + pyInputCodeMirror.focus(); + pyInputCodeMirror.setCursor(errorLineNo, 0); + pyInputCodeMirror.setLineClass(errorLineNo, null, 'errorLine'); + + pyInputCodeMirror.setOption('onChange', function() { + pyInputCodeMirror.setLineClass(errorLineNo, null, null); // reset line back to normal + pyInputCodeMirror.setOption('onChange', null); // cancel + }); + } + + alert(trace[0].exception_msg); + } + else if (trace[trace.length - 1].exception_msg) { + alert(trace[trace.length - 1].exception_msg); + } + else { + alert("Whoa, unknown error! Reload to try again, or report a bug to philip@pgbovine.net\n\n(Click the 'Generate URL' button to include a unique URL in your email bug report.)"); + } + + $('#executeBtn').html("Visualize execution"); + $('#executeBtn').attr('disabled', false); + } + else { + var startingInstruction = 0; + + // only do this at most ONCE, and then clear out preseededCurInstr + if (preseededCurInstr && preseededCurInstr < trace.length) { // NOP anyways if preseededCurInstr is 0 + startingInstruction = preseededCurInstr; + preseededCurInstr = null; + } + + // forceStartingInstr overrides everything else + if (forceStartingInstr !== undefined) { + startingInstruction = forceStartingInstr; + } + + myVisualizer = new ExecutionVisualizer('pyOutputPane', + dataFromBackend, + {startingInstruction: startingInstruction, + updateOutputCallback: function() {$('#urlOutput,#embedCodeOutput').val('');}, + // tricky: selector 'true' and 'false' values are strings! + disableHeapNesting: ($('#heapPrimitivesSelector').val() == 'true'), + drawParentPointers: ($('#drawParentPointerSelector').val() == 'true'), + textualMemoryLabels: ($('#textualMemoryLabelsSelector').val() == 'true'), + showOnlyOutputs: ($('#showOnlyOutputsSelector').val() == 'true'), + executeCodeWithRawInputFunc: executeCodeWithRawInput, + + // undocumented experimental modes: + pyCrazyMode: ($('#pythonVersionSelector').val() == '2crazy'), + //allowEditAnnotations: true, + }); + + + // set keyboard bindings + // VERY IMPORTANT to clear and reset this every time or + // else the handlers might be bound multiple times + $(document).unbind('keydown'); + $(document).keydown(function(k) { + if (k.keyCode == 37) { // left arrow + if (myVisualizer.stepBack()) { + k.preventDefault(); // don't horizontally scroll the display + } + } + else if (k.keyCode == 39) { // right arrow + if (myVisualizer.stepForward()) { + k.preventDefault(); // don't horizontally scroll the display + } + } + }); + + // also scroll to top to make the UI more usable on smaller monitors + $(document).scrollTop(0); + + $.bbq.pushState({ mode: 'display' }, 2 /* completely override other hash strings to keep URL clean */); + } + }, + "json"); + } + + function executeCodeFromScratch() { + // reset these globals + rawInputLst = []; + + executeCode(); + } + + function executeCodeWithRawInput(rawInputStr, curInstr) { + enterDisplayNoFrillsMode(); + + // set some globals + rawInputLst.push(rawInputStr); + + executeCode(curInstr); + } + + $("#executeBtn").attr('disabled', false); + $("#executeBtn").click(executeCodeFromScratch); + + + // canned examples + + $("#tutorialExampleLink").click(function() { + $.get("example-code/py_tutorial.txt", setCodeMirrorVal); + return false; + }); + + $("#strtokExampleLink").click(function() { + $.get("example-code/strtok.txt", setCodeMirrorVal); + return false; + }); + + $("#listCompLink").click(function() { + $.get("example-code/list-comp.txt", setCodeMirrorVal); + return false; + }); + + $("#fibonacciExampleLink").click(function() { + $.get("example-code/fib.txt", setCodeMirrorVal); + return false; + }); + + $("#memoFibExampleLink").click(function() { + $.get("example-code/memo_fib.txt", setCodeMirrorVal); + return false; + }); + + $("#factExampleLink").click(function() { + $.get("example-code/fact.txt", setCodeMirrorVal); + return false; + }); + + $("#filterExampleLink").click(function() { + $.get("example-code/filter.txt", setCodeMirrorVal); + return false; + }); + + $("#insSortExampleLink").click(function() { + $.get("example-code/ins_sort.txt", setCodeMirrorVal); + return false; + }); + + $("#aliasExampleLink").click(function() { + $.get("example-code/aliasing.txt", setCodeMirrorVal); + return false; + }); + + $("#happyExampleLink").click(function() { + $.get("example-code/happy.txt", setCodeMirrorVal); + return false; + }); + + $("#newtonExampleLink").click(function() { + $.get("example-code/sqrt.txt", setCodeMirrorVal); + return false; + }); + + $("#oopSmallExampleLink").click(function() { + $.get("example-code/oop_small.txt", setCodeMirrorVal); + return false; + }); + + $("#mapExampleLink").click(function() { + $.get("example-code/map.txt", setCodeMirrorVal); + return false; + }); + + $("#rawInputExampleLink").click(function() { + $.get("example-code/raw_input.txt", setCodeMirrorVal); + return false; + }); + + $("#oop1ExampleLink").click(function() { + $.get("example-code/oop_1.txt", setCodeMirrorVal); + return false; + }); + + $("#oop2ExampleLink").click(function() { + $.get("example-code/oop_2.txt", setCodeMirrorVal); + return false; + }); + + $("#inheritanceExampleLink").click(function() { + $.get("example-code/oop_inherit.txt", setCodeMirrorVal); + return false; + }); + + $("#sumExampleLink").click(function() { + $.get("example-code/sum.txt", setCodeMirrorVal); + return false; + }); + + $("#pwGcdLink").click(function() { + $.get("example-code/wentworth_gcd.txt", setCodeMirrorVal); + return false; + }); + + $("#pwSumListLink").click(function() { + $.get("example-code/wentworth_sumList.txt", setCodeMirrorVal); + return false; + }); + + $("#towersOfHanoiLink").click(function() { + $.get("example-code/towers_of_hanoi.txt", setCodeMirrorVal); + return false; + }); + + $("#pwTryFinallyLink").click(function() { + $.get("example-code/wentworth_try_finally.txt", setCodeMirrorVal); + return false; + }); + + $("#sumCubesLink").click(function() { + $.get("example-code/sum-cubes.txt", setCodeMirrorVal); + return false; + }); + + $("#decoratorsLink").click(function() { + $.get("example-code/decorators.txt", setCodeMirrorVal); + return false; + }); + + $("#genPrimesLink").click(function() { + $.get("example-code/gen_primes.txt", setCodeMirrorVal); + return false; + }); + + $("#genExprLink").click(function() { + $.get("example-code/genexpr.txt", setCodeMirrorVal); + return false; + }); + + + $('#closure1Link').click(function() { + $.get("example-code/closures/closure1.txt", setCodeMirrorVal); + return false; + }); + $('#closure2Link').click(function() { + $.get("example-code/closures/closure2.txt", setCodeMirrorVal); + return false; + }); + $('#closure3Link').click(function() { + $.get("example-code/closures/closure3.txt", setCodeMirrorVal); + return false; + }); + $('#closure4Link').click(function() { + $.get("example-code/closures/closure4.txt", setCodeMirrorVal); + return false; + }); + $('#closure5Link').click(function() { + $.get("example-code/closures/closure5.txt", setCodeMirrorVal); + return false; + }); + $('#lambdaParamLink').click(function() { + $.get("example-code/closures/lambda-param.txt", setCodeMirrorVal); + return false; + }); + $('#tortureLink').click(function() { + $.get("example-code/closures/student-torture.txt", setCodeMirrorVal); + return false; + }); + + + + $('#aliasing1Link').click(function() { + $.get("example-code/aliasing/aliasing1.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing2Link').click(function() { + $.get("example-code/aliasing/aliasing2.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing3Link').click(function() { + $.get("example-code/aliasing/aliasing3.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing4Link').click(function() { + $.get("example-code/aliasing/aliasing4.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing5Link').click(function() { + $.get("example-code/aliasing/aliasing5.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing6Link').click(function() { + $.get("example-code/aliasing/aliasing6.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing7Link').click(function() { + $.get("example-code/aliasing/aliasing7.txt", setCodeMirrorVal); + return false; + }); + $('#aliasing8Link').click(function() { + $.get("example-code/aliasing/aliasing8.txt", setCodeMirrorVal); + return false; + }); + + + $('#ll1Link').click(function() { + $.get("example-code/linked-lists/ll1.txt", setCodeMirrorVal); + return false; + }); + $('#ll2Link').click(function() { + $.get("example-code/linked-lists/ll2.txt", setCodeMirrorVal); + return false; + }); + $('#sumListLink').click(function() { + $.get("example-code/sum-list.txt", setCodeMirrorVal); + return false; + }); + + $('#varargsLink').click(function() { + $.get("example-code/varargs.txt", setCodeMirrorVal); + return false; + }); + + $('#forElseLink').click(function() { + $.get("example-code/for-else.txt", setCodeMirrorVal); + return false; + }); + + $('#nonlocalLink').click(function() { + $.get("example-code/nonlocal.txt", setCodeMirrorVal); + return false; + }); + + + // handle hash parameters passed in when loading the page + preseededCode = $.bbq.getState('code'); + if (preseededCode) { + setCodeMirrorVal(preseededCode); + } + else { + // select a canned example on start-up: + $("#aliasExampleLink").trigger('click'); + } + + // parse query string options ... + // ugh, ugly tristate due to the possibility of them being undefined + var cumulativeState = $.bbq.getState('cumulative'); + if (cumulativeState !== undefined) { + $('#cumulativeModeSelector').val(cumulativeState); + } + var heapPrimitivesState = $.bbq.getState('heapPrimitives'); + if (heapPrimitivesState !== undefined) { + $('#heapPrimitivesSelector').val(heapPrimitivesState); + } + var drawParentPointerState = $.bbq.getState('drawParentPointers'); + if (drawParentPointerState !== undefined) { + $('#drawParentPointerSelector').val(drawParentPointerState); + } + var textRefsState = $.bbq.getState('textReferences'); + if (textRefsState !== undefined) { + $('#textualMemoryLabelsSelector').val(textRefsState); + } + var showOnlyOutputsState = $.bbq.getState('showOnlyOutputs'); + if (showOnlyOutputsState !== undefined) { + $('#showOnlyOutputsSelector').val(showOnlyOutputsState); + } + + var pyState = $.bbq.getState('py'); + if (pyState !== undefined) { + $('#pythonVersionSelector').val(pyState); + } + + appMode = $.bbq.getState('mode'); // assign this to the GLOBAL appMode + if ((appMode == "display") && preseededCode /* jump to display only with pre-seeded code */) { + preseededCurInstr = Number($.bbq.getState('curInstr')); + $("#executeBtn").trigger('click'); + } + else { + if (appMode === undefined) { + // default mode is 'edit', don't trigger a "hashchange" event + appMode = 'edit'; + } + else { + // fail-soft by killing all passed-in hashes and triggering a "hashchange" + // event, which will then go to 'edit' mode + $.bbq.removeState(); + } + } + + + // log a generic AJAX error handler + $(document).ajaxError(function() { + alert("Server error (possibly due to memory/resource overload). Report a bug to philip@pgbovine.net\n\n(Click the 'Generate URL' button to include a unique URL in your email bug report.)"); + + $('#executeBtn').html("Visualize execution"); + $('#executeBtn').attr('disabled', false); + }); + + + // redraw connector arrows on window resize + $(window).resize(function() { + if (appMode == 'display') { + myVisualizer.redrawConnectors(); + } + }); + + $('#genUrlBtn').bind('click', function() { + var myArgs = {code: pyInputCodeMirror.getValue(), + mode: appMode, + cumulative: $('#cumulativeModeSelector').val(), + heapPrimitives: $('#heapPrimitivesSelector').val(), + drawParentPointers: $('#drawParentPointerSelector').val(), + textReferences: $('#textualMemoryLabelsSelector').val(), + showOnlyOutputs: $('#showOnlyOutputsSelector').val(), + py: $('#pythonVersionSelector').val()}; + + if (appMode == 'display') { + myArgs.curInstr = myVisualizer.curInstr; + } + + var urlStr = $.param.fragment(window.location.href, myArgs, 2 /* clobber all */); + $('#urlOutput').val(urlStr); + }); + + + $('#genEmbedBtn').bind('click', function() { + assert(appMode == 'display'); + var myArgs = {code: pyInputCodeMirror.getValue(), + cumulative: $('#cumulativeModeSelector').val(), + heapPrimitives: $('#heapPrimitivesSelector').val(), + drawParentPointers: $('#drawParentPointerSelector').val(), + textReferences: $('#textualMemoryLabelsSelector').val(), + showOnlyOutputs: $('#showOnlyOutputsSelector').val(), + py: $('#pythonVersionSelector').val(), + curInstr: myVisualizer.curInstr, + }; + + var embedUrlStr = $.param.fragment('http://pythontutor.com/iframe-embed.html', myArgs, 2 /* clobber all */); + var iframeStr = ''; + $('#embedCodeOutput').val(iframeStr); + }); +}); + diff --git a/book/common/ext/codelens/v3/js/opt-lessons.js b/book/common/ext/codelens/v3/js/opt-lessons.js new file mode 100644 index 0000000..1d279ff --- /dev/null +++ b/book/common/ext/codelens/v3/js/opt-lessons.js @@ -0,0 +1,118 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) 2010-2013 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// Pre-reqs: pytutor.js and jquery.ba-bbq.min.js should be imported BEFORE this file + +var backend_script = 'exec'; // URL of backend script, which must eventually call pg_logger.py + +var myVisualizer = null; // singleton ExecutionVisualizer instance + +var lessonScript = null; +var metadataJSON = null; + +function parseLessonFile(dat) { + var toks = dat.split('======'); + + // globals + lessonScript = toks[0].rtrim(); + metadataJSON = $.parseJSON(toks[1]); + + $('#lessonTitle').html(metadataJSON.title); + $('#lessonDescription').html(metadataJSON.description); + + document.title = metadataJSON.title + ' - Online Python Tutor (v3)'; + + $.get(backend_script, + {user_script : lessonScript}, + function(dataFromBackend) { + var trace = dataFromBackend.trace; + + // don't enter visualize mode if there are killer errors: + if (!trace || + (trace.length == 0) || + (trace[trace.length - 1].event == 'uncaught_exception')) { + + if (trace.length == 1) { + alert(trace[0].exception_msg); + } + else { + alert("Whoa, unknown error! Reload to try again, or report a bug to philip@pgbovine.net\n\n(Click the 'Generate URL' button to include a unique URL in your email bug report.)"); + } + } + else { + myVisualizer = new ExecutionVisualizer('pyOutputPane', + dataFromBackend, + {embeddedMode: true, + updateOutputCallback: updateLessonNarration}); + + myVisualizer.updateOutput(); + } + }, + "json"); +} + +function updateLessonNarration(myViz) { + var curInstr = myViz.curInstr; + + assert(metadataJSON); + + var annotation = metadataJSON[curInstr + 1]; // adjust for indexing diffs + if (annotation) { + $('#lessonNarration').html(annotation); + } + else { + $('#lessonNarration').html(''); + } + + // hack from John DeNero to ensure that once a div grows it height, it + // never shrinks again + $('#lessonNarration').css('min-height', $('#lessonNarration').css('height')); +} + +$(document).ready(function() { + + //$.get("lessons/aliasing.txt", parseLessonFile); + //$.get("lessons/dive-into-python-311.txt", parseLessonFile); + //$.get("lessons/for-else.txt", parseLessonFile); + $.get("lessons/varargs.txt", parseLessonFile); + + // log a generic AJAX error handler + $(document).ajaxError(function() { + alert("Server error (possibly due to memory/resource overload)."); + }); + + + // redraw connector arrows on window resize + $(window).resize(function() { + if (myVisualizer) { + myVisualizer.redrawConnectors(); + } + }); + +}); diff --git a/book/common/ext/codelens/v3/js/pytutor.js b/book/common/ext/codelens/v3/js/pytutor.js new file mode 100644 index 0000000..3aae695 --- /dev/null +++ b/book/common/ext/codelens/v3/js/pytutor.js @@ -0,0 +1,3463 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) 2010-2013 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +/* To import, put this at the top of your HTML page: + + + + + + + + + + + + + + + + +*/ + + +/* Coding gotchas: + +- NEVER use naked $(__) or d3.select(__) statements to select DOM elements. + + ALWAYS use myViz.domRoot or myViz.domRootD3 for jQuery and D3, respectively. + + Otherwise things will break in weird ways when you have more than one visualization + embedded within a webpage, due to multiple matches in the global namespace. + + +- always use generateID to generate unique CSS IDs, or else things will break + when multiple ExecutionVisualizer instances are displayed on a webpage + +*/ + + +var SVG_ARROW_POLYGON = '0,3 12,3 12,0 18,5 12,10 12,7 0,7'; +var SVG_ARROW_HEIGHT = 10; // must match height of SVG_ARROW_POLYGON + +var curVisualizerID = 1; // global to uniquely identify each ExecutionVisualizer instance + +// domRootID is the string ID of the root element where to render this instance +// dat is data returned by the Python Tutor backend consisting of two fields: +// code - string of executed code +// trace - a full execution trace +// +// params is an object containing optional parameters, such as: +// jumpToEnd - if non-null, jump to the very end of execution +// startingInstruction - the (zero-indexed) execution point to display upon rendering +// hideOutput - hide "Program output" display +// codeDivHeight - maximum height of #pyCodeOutputDiv (in integer pixels) +// codeDivWidth - maximum width of #pyCodeOutputDiv (in integer pixels) +// editCodeBaseURL - the base URL to visit when the user clicks 'Edit code' (if null, then 'Edit code' link hidden) +// allowEditAnnotations - allow user to edit per-step annotations (default: false) +// embeddedMode - shortcut for hideOutput=true, allowEditAnnotations=false +// disableHeapNesting - if true, then render all heap objects at the top level (i.e., no nested objects) +// codeDivWidth=350, codeDivHeight=400 +// drawParentPointers - if true, then draw environment diagram parent pointers for all frames +// WARNING: there are hard-to-debug MEMORY LEAKS associated with activating this option +// textualMemoryLabels - render references using textual memory labels rather than as jsPlumb arrows. +// this is good for slow browsers or when used with disableHeapNesting +// to prevent "arrow overload" +// showOnlyOutputs - show only program outputs and NOT internal data structures +// updateOutputCallback - function to call (with 'this' as parameter) +// whenever this.updateOutput() is called +// (BEFORE rendering the output display) +// heightChangeCallback - function to call (with 'this' as parameter) +// whenever the HEIGHT of #dataViz changes +// verticalStack - if true, then stack code display ON TOP of visualization +// (else place side-by-side) +// executeCodeWithRawInputFunc - function to call when you want to re-execute the given program +// with some new user input (somewhat hacky!) +// highlightLines - highlight current and previously executed lines (default: false) +// arrowLines - draw arrows pointing to current and previously executed lines (default: true) +// pyCrazyMode - run with Py2crazy, which provides expression-level +// granularity instead of line-level granularity (HIGHLY EXPERIMENTAL!) +function ExecutionVisualizer(domRootID, dat, params) { + this.curInputCode = dat.code.rtrim(); // kill trailing spaces + this.curTrace = dat.trace; + + + // optional filtering to remove redundancy ... + // ok, we're gonna filter out all trace entries of 'call' events, + // because each one contains IDENTICAL state information as the + // 'step_line' entry immediately following it. this filtering allows the + // visualization to not show as much redundancy. + this.curTrace = this.curTrace.filter(function(e) {return e.event != 'call';}); + + // if the final entry is raw_input or mouse_input, then trim it from the trace and + // set a flag to prompt for user input when execution advances to the + // end of the trace + if (this.curTrace.length > 0) { + var lastEntry = this.curTrace[this.curTrace.length - 1]; + if (lastEntry.event == 'raw_input') { + this.promptForUserInput = true; + this.userInputPromptStr = lastEntry.prompt; + this.curTrace.pop() // kill last entry so that it doesn't get displayed + } + else if (lastEntry.event == 'mouse_input') { + this.promptForMouseInput = true; + this.userInputPromptStr = lastEntry.prompt; + this.curTrace.pop() // kill last entry so that it doesn't get displayed + } + } + + this.curInstr = 0; + + this.params = params; + if (!this.params) { + this.params = {}; // make it an empty object by default + } + + var arrowLinesDef = (this.params.arrowLines !== undefined); + var highlightLinesDef = (this.params.highlightLines !== undefined); + + if (!arrowLinesDef && !highlightLinesDef) { + // neither is set + this.params.highlightLines = false; + this.params.arrowLines = true; + } + else if (arrowLinesDef && highlightLinesDef) { + // both are set, so just use their set values + } + else if (arrowLinesDef) { + // only arrowLines set + this.params.highlightLines = !(this.params.arrowLines); + } + else { + // only highlightLines set + this.params.arrowLines = !(this.params.highlightLines); + } + + // audible! + if (this.params.pyCrazyMode) { + this.params.arrowLines = this.params.highlightLines = false; + } + + // David's original logic ... + /* + if (!this.params.arrowLines && !this.params.highlightLines) { + this.params.highlightLines = false; + this.params.arrowLines = true; + } + else if (this.params.arrowLines) { + this.params.arrowLines = (this.params.arrowLines == true); + this.params.highlightLines = !(this.params.arrowLines); + } + else if (this.params.highlightLines) { + this.params.highlightLines = (this.params.highlightLines == true); + this.params.arrowLines = !(this.params.highlightLines); + } + else { + this.params.arrowLines = (this.params.arrowLines == true); + this.params.highlightLines = (this.params.highlightLines == true); + } + */ + + // needs to be unique! + this.visualizerID = curVisualizerID; + curVisualizerID++; + + + this.leftGutterSvgInitialized = false; + this.arrowOffsetY = undefined; + this.codeRowHeight = undefined; + + // avoid 'undefined' state + this.disableHeapNesting = (this.params.disableHeapNesting == true); + this.drawParentPointers = (this.params.drawParentPointers == true); + this.textualMemoryLabels = (this.params.textualMemoryLabels == true); + this.showOnlyOutputs = (this.params.showOnlyOutputs == true); + + this.executeCodeWithRawInputFunc = this.params.executeCodeWithRawInputFunc; + + // cool, we can create a separate jsPlumb instance for each visualization: + this.jsPlumbInstance = jsPlumb.getInstance({ + Endpoint: ["Dot", {radius:3}], + EndpointStyles: [{fillStyle: connectorBaseColor}, {fillstyle: null} /* make right endpoint invisible */], + Anchors: ["RightMiddle", "LeftMiddle"], + PaintStyle: {lineWidth:1, strokeStyle: connectorBaseColor}, + + // bezier curve style: + //Connector: [ "Bezier", { curviness:15 }], /* too much 'curviness' causes lines to run together */ + //Overlays: [[ "Arrow", { length: 14, width:10, foldback:0.55, location:0.35 }]], + + // state machine curve style: + Connector: [ "StateMachine" ], + Overlays: [[ "Arrow", { length: 10, width:7, foldback:0.55, location:1 }]], + EndpointHoverStyles: [{fillStyle: connectorHighlightColor}, {fillstyle: null} /* make right endpoint invisible */], + HoverPaintStyle: {lineWidth: 1, strokeStyle: connectorHighlightColor}, + }); + + + // true iff trace ended prematurely since maximum instruction limit has + // been reached + var instrLimitReached = false; + + + // the root elements for jQuery and D3 selections, respectively. + // ALWAYS use these and never use naked $(__) or d3.select(__) + this.domRoot = $('#' + domRootID); + this.domRoot.data("vis",this); // bnm store a reference to this as div data for use later. + this.domRootD3 = d3.select('#' + domRootID); + + // stick a new div.ExecutionVisualizer within domRoot and make that + // the new domRoot: + this.domRoot.html('
    '); + + this.domRoot = this.domRoot.find('div.ExecutionVisualizer'); + this.domRootD3 = this.domRootD3.select('div.ExecutionVisualizer'); + + + // initialize in renderPyCodeOutput() + this.codeOutputLines = null; + this.breakpoints = null; // set of execution points to set as breakpoints + this.sortedBreakpointsList = null; // sorted and synced with breakpointLines + this.hoverBreakpoints = null; // set of breakpoints because we're HOVERING over a given line + + this.enableTransitions = false; // EXPERIMENTAL - enable transition effects + + + this.hasRendered = false; + + this.render(); // go for it! + +} + + +// create a unique ID, which is often necessary so that jsPlumb doesn't get confused +// due to multiple ExecutionVisualizer instances being displayed simultaneously +ExecutionVisualizer.prototype.generateID = function(original_id) { + // (it's safer to start names with a letter rather than a number) + return 'v' + this.visualizerID + '__' + original_id; +} + + +ExecutionVisualizer.prototype.render = function() { + if (this.hasRendered) { + alert('ERROR: You should only call render() ONCE on an ExecutionVisualizer object.'); + return; + } + + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + var codeDisplayHTML = + '
    \ +
    \ + \ +
    \ +
    \ + \ + \ + Step ? of ?\ + \ + \ +
    \ +
    \ +
    \ +
    \ + \ +
    \ +
    \ +
    \ +
    '; + + var outputsHTML = + '
    \ +
    \ + Program output:
    \ + \ +
    '; + + var codeVizHTML = + '
    \ +
    \ + \ + \ + \ + \ +
    \ +
    \ +
    Frames
    \ +
    \ +
    \ +
    \ +
    \ +
    Objects
    \ +
    \ +
    \ +
    '; + + var vizHeaderHTML = + '
    \ + \ +
    \ + \ +
    \ +
    '; + + if (this.params.verticalStack) { + this.domRoot.html(vizHeaderHTML + '
    ' + + codeDisplayHTML + '
    ' + + codeVizHTML + '
    '); + } + else { + this.domRoot.html(vizHeaderHTML + '
    ' + + codeDisplayHTML + '' + + codeVizHTML + '
    '); + } + + if (this.showOnlyOutputs) { + myViz.domRoot.find('#dataViz').hide(); + this.domRoot.find('#vizLayoutTdSecond').append(outputsHTML); + + if (this.params.verticalStack) { + this.domRoot.find('#vizLayoutTdSecond').css('padding-top', '25px'); + } + else { + this.domRoot.find('#vizLayoutTdSecond').css('padding-left', '25px'); + } + } + else { + this.domRoot.find('#vizLayoutTdFirst').append(outputsHTML); + } + + if (this.params.arrowLines) { + this.domRoot.find('#legendDiv') + .append(' line that has just executed') + .append('

    next line to execute

    '); + + myViz.domRootD3.select('svg#prevLegendArrowSVG') + .append('polygon') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', lightArrowColor); + + myViz.domRootD3.select('svg#curLegendArrowSVG') + .append('polygon') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', darkArrowColor); + } + else if (this.params.highlightLines) { + myViz.domRoot.find('#legendDiv') + .append('line that has just executed ') + .append('next line to execute') + } + else if (this.params.pyCrazyMode) { + myViz.domRoot.find('#legendDiv') + .append('Py2crazy mode!') + .append(' Stepping through (roughly) each executed expression. Color codes:

    ') + .append('expression that just executed
    ') + .append('next expression to execute'); + } + + + if (this.params.editCodeBaseURL) { + var urlStr = $.param.fragment(this.params.editCodeBaseURL, + {code: this.curInputCode}, + 2); + this.domRoot.find('#editBtn').attr('href', urlStr); + } + else { + this.domRoot.find('#editCodeLinkDiv').hide(); // just hide for simplicity! + this.domRoot.find('#editBtn').attr('href', "#"); + this.domRoot.find('#editBtn').click(function(){return false;}); // DISABLE the link! + } + + if (this.params.allowEditAnnotations !== undefined) { + this.allowEditAnnotations = this.params.allowEditAnnotations; + } + else { + this.allowEditAnnotations = false; + } + + if (this.params.pyCrazyMode !== undefined) { + this.pyCrazyMode = this.params.pyCrazyMode; + } + else { + this.pyCrazyMode = false; + } + + this.domRoot.find('#stepAnnotationEditor').hide(); + + if (this.params.embeddedMode) { + this.params.hideOutput = true; // put this before hideOutput handler + + // don't override if they've already been set! + if (this.params.codeDivWidth === undefined) { + this.params.codeDivWidth = 350; + } + + if (this.params.codeDivHeight === undefined) { + this.params.codeDivHeight = 400; + } + + this.allowEditAnnotations = false; + } + + myViz.editAnnotationMode = false; + + if (this.allowEditAnnotations) { + var ab = this.domRoot.find('#annotateBtn'); + + ab.click(function() { + if (myViz.editAnnotationMode) { + myViz.enterViewAnnotationsMode(); + + myViz.domRoot.find("#jmpFirstInstr,#jmpLastInstr,#jmpStepBack,#jmpStepFwd,#executionSlider,#editCodeLinkDiv,#stepAnnotationViewer").show(); + myViz.domRoot.find('#stepAnnotationEditor').hide(); + ab.html('Annotate this step'); + } + else { + myViz.enterEditAnnotationsMode(); + + myViz.domRoot.find("#jmpFirstInstr,#jmpLastInstr,#jmpStepBack,#jmpStepFwd,#executionSlider,#editCodeLinkDiv,#stepAnnotationViewer").hide(); + myViz.domRoot.find('#stepAnnotationEditor').show(); + ab.html('Done annotating'); + } + }); + } + else { + this.domRoot.find('#annotateBtn').hide(); + } + + + // not enough room for these extra buttons ... + if (this.params.codeDivWidth && + this.params.codeDivWidth < 470) { + this.domRoot.find('#jmpFirstInstr').hide(); + this.domRoot.find('#jmpLastInstr').hide(); + } + + + if (this.params.codeDivWidth) { + // set width once + this.domRoot.find('#codeDisplayDiv').width( + this.params.codeDivWidth); + // it will propagate to the slider + } + + // enable left-right draggable pane resizer (originally from David Pritchard) + var syncStdoutWidth = function(event, ui){ + $("#vizLayoutTdFirst #pyStdout").width(ui.size.width-2*parseInt($("#pyStdout").css("padding-left")));}; + $('#codeDisplayDiv').resizable({handles:"e", resize: syncStdoutWidth}); + syncStdoutWidth(null, {size: {width: $('#codeDisplayDiv').width()}}); + + + if (this.params.codeDivHeight) { + this.domRoot.find('#pyCodeOutputDiv') + .css('max-height', this.params.codeDivHeight + 'px'); + } + + + // create a persistent globals frame + // (note that we need to keep #globals_area separate from #stack for d3 to work its magic) + this.domRoot.find("#globals_area").append('

    Global variables
    '); + + + if (this.params.hideOutput) { + this.domRoot.find('#progOutputs').hide(); + } + + this.domRoot.find("#jmpFirstInstr").click(function() { + myViz.curInstr = 0; + myViz.updateOutput(); + }); + + this.domRoot.find("#jmpLastInstr").click(function() { + myViz.curInstr = myViz.curTrace.length - 1; + myViz.updateOutput(); + }); + + this.domRoot.find("#jmpStepBack").click(function() { + myViz.stepBack(); + }); + + this.domRoot.find("#jmpStepFwd").click(function() { + myViz.stepForward(); + }); + + // disable controls initially ... + this.domRoot.find("#vcrControls #jmpFirstInstr").attr("disabled", true); + this.domRoot.find("#vcrControls #jmpStepBack").attr("disabled", true); + this.domRoot.find("#vcrControls #jmpStepFwd").attr("disabled", true); + this.domRoot.find("#vcrControls #jmpLastInstr").attr("disabled", true); + + + + // must postprocess curTrace prior to running precomputeCurTraceLayouts() ... + var lastEntry = this.curTrace[this.curTrace.length - 1]; + + this.instrLimitReached = (lastEntry.event == 'instruction_limit_reached'); + + if (this.instrLimitReached) { + this.curTrace.pop() // kill last entry + var warningMsg = lastEntry.exception_msg; + myViz.domRoot.find("#errorOutput").html(htmlspecialchars(warningMsg)); + myViz.domRoot.find("#errorOutput").show(); + } + + // set up slider after postprocessing curTrace + + var sliderDiv = this.domRoot.find('#executionSlider'); + sliderDiv.slider({min: 0, max: this.curTrace.length - 1, step: 1}); + //disable keyboard actions on the slider itself (to prevent double-firing of events) + sliderDiv.find(".ui-slider-handle").unbind('keydown'); + // make skinnier and taller + sliderDiv.find(".ui-slider-handle").css('width', '0.8em'); + sliderDiv.find(".ui-slider-handle").css('height', '1.4em'); + this.domRoot.find(".ui-widget-content").css('font-size', '0.9em'); + + this.domRoot.find('#executionSlider').bind('slide', function(evt, ui) { + // this is SUPER subtle. if this value was changed programmatically, + // then evt.originalEvent will be undefined. however, if this value + // was changed by a user-initiated event, then this code should be + // executed ... + if (evt.originalEvent) { + myViz.curInstr = ui.value; + myViz.updateOutput(); + } + }); + + + if (this.params.startingInstruction) { + assert(0 <= this.params.startingInstruction && + this.params.startingInstruction < this.curTrace.length); + this.curInstr = this.params.startingInstruction; + } + + if (this.params.jumpToEnd) { + this.curInstr = this.curTrace.length - 1; + } + + + this.precomputeCurTraceLayouts(); + + this.renderPyCodeOutput(); + + this.updateOutput(); + + this.hasRendered = true; +} + + +ExecutionVisualizer.prototype.showVizHeaderViewMode = function() { + var titleVal = this.domRoot.find('#vizTitleEditor').val().trim(); + var descVal = this.domRoot.find('#vizDescriptionEditor').val().trim(); + + this.domRoot.find('#vizTitleEditor,#vizDescriptionEditor').hide(); + + if (!titleVal && !descVal) { + this.domRoot.find('#vizHeader').hide(); + } + else { + this.domRoot.find('#vizHeader,#vizTitleViewer,#vizDescriptionViewer').show(); + if (titleVal) { + this.domRoot.find('#vizTitleViewer').html(htmlsanitize(titleVal)); // help prevent HTML/JS injection attacks + } + + if (descVal) { + this.domRoot.find('#vizDescriptionViewer').html(htmlsanitize(descVal)); // help prevent HTML/JS injection attacks + } + } +} + +ExecutionVisualizer.prototype.showVizHeaderEditMode = function() { + this.domRoot.find('#vizHeader').show(); + + this.domRoot.find('#vizTitleViewer,#vizDescriptionViewer').hide(); + this.domRoot.find('#vizTitleEditor,#vizDescriptionEditor').show(); +} + + +ExecutionVisualizer.prototype.destroyAllAnnotationBubbles = function() { + var myViz = this; + + // hopefully destroys all old bubbles and reclaims their memory + if (myViz.allAnnotationBubbles) { + $.each(myViz.allAnnotationBubbles, function(i, e) { + e.destroyQTip(); + }); + } + + // remove this handler as well! + this.domRoot.find('#pyCodeOutputDiv').unbind('scroll'); + + myViz.allAnnotationBubbles = null; +} + +ExecutionVisualizer.prototype.initStepAnnotation = function() { + var curEntry = this.curTrace[this.curInstr]; + if (curEntry.stepAnnotation) { + this.domRoot.find("#stepAnnotationViewer").html(htmlsanitize(curEntry.stepAnnotation)); // help prevent HTML/JS injection attacks + this.domRoot.find("#stepAnnotationEditor").val(curEntry.stepAnnotation); + } + else { + this.domRoot.find("#stepAnnotationViewer").html(''); + this.domRoot.find("#stepAnnotationEditor").val(''); + } +} + +ExecutionVisualizer.prototype.initAllAnnotationBubbles = function() { + var myViz = this; + + // TODO: check for memory leaks + //console.log('initAllAnnotationBubbles'); + + myViz.destroyAllAnnotationBubbles(); + + var codelineIDs = []; + $.each(this.domRoot.find('#pyCodeOutput .cod'), function(i, e) { + codelineIDs.push($(e).attr('id')); + }); + + var heapObjectIDs = []; + $.each(this.domRoot.find('.heapObject'), function(i, e) { + heapObjectIDs.push($(e).attr('id')); + }); + + var variableIDs = []; + $.each(this.domRoot.find('.variableTr'), function(i, e) { + variableIDs.push($(e).attr('id')); + }); + + var frameIDs = []; + $.each(this.domRoot.find('.stackFrame'), function(i, e) { + frameIDs.push($(e).attr('id')); + }); + + myViz.allAnnotationBubbles = []; + + $.each(codelineIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'codeline', e));}); + $.each(heapObjectIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'object', e));}); + $.each(variableIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'variable', e));}); + $.each(frameIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'frame', e));}); + + + this.domRoot.find('#pyCodeOutputDiv').scroll(function() { + $.each(myViz.allAnnotationBubbles, function(i, e) { + if (e.type == 'codeline') { + e.redrawCodelineBubble(); + } + }); + }); + + //console.log('initAllAnnotationBubbles', myViz.allAnnotationBubbles.length); +} + + +ExecutionVisualizer.prototype.enterViewAnnotationsMode = function() { + this.editAnnotationMode = false; + var curEntry = this.curTrace[this.curInstr]; + + // TODO: check for memory leaks!!! + var myViz = this; + + if (!myViz.allAnnotationBubbles) { + if (curEntry.bubbleAnnotations) { + // If there is an existing annotations object, then initiate all annotations bubbles + // and display them in 'View' mode + myViz.initAllAnnotationBubbles(); + + $.each(myViz.allAnnotationBubbles, function(i, e) { + var txt = curEntry.bubbleAnnotations[e.domID]; + if (txt) { + e.preseedText(txt); + } + }); + } + } + + + if (myViz.allAnnotationBubbles) { + var curAnnotations = {}; + + $.each(myViz.allAnnotationBubbles, function(i, e) { + e.enterViewMode(); + + if (e.text) { + curAnnotations[e.domID] = e.text; + } + }); + + // Save annotations directly into the current trace entry as an 'annotations' object + // directly mapping domID -> text. + // + // NB: This scheme can break if the functions for generating domIDs are altered. + curEntry.bubbleAnnotations = curAnnotations; + } + + var stepAnnotationEditorVal = myViz.domRoot.find("#stepAnnotationEditor").val().trim(); + if (stepAnnotationEditorVal) { + curEntry.stepAnnotation = stepAnnotationEditorVal; + } + else { + delete curEntry.stepAnnotation; // go as far as to DELETE this field entirely + } + + myViz.initStepAnnotation(); + + myViz.showVizHeaderViewMode(); + + // redraw all connectors and bubbles in new vertical position .. + myViz.redrawConnectors(); + myViz.redrawAllAnnotationBubbles(); +} + +ExecutionVisualizer.prototype.enterEditAnnotationsMode = function() { + this.editAnnotationMode = true; + + // TODO: check for memory leaks!!! + var myViz = this; + + var curEntry = this.curTrace[this.curInstr]; + + if (!myViz.allAnnotationBubbles) { + myViz.initAllAnnotationBubbles(); + } + + $.each(myViz.allAnnotationBubbles, function(i, e) { + e.enterEditMode(); + }); + + + if (curEntry.stepAnnotation) { + myViz.domRoot.find("#stepAnnotationEditor").val(curEntry.stepAnnotation); + } + else { + myViz.domRoot.find("#stepAnnotationEditor").val(''); + } + + + myViz.showVizHeaderEditMode(); + + // redraw all connectors and bubbles in new vertical position .. + myViz.redrawConnectors(); + myViz.redrawAllAnnotationBubbles(); +} + + +ExecutionVisualizer.prototype.redrawAllAnnotationBubbles = function() { + if (this.allAnnotationBubbles) { + $.each(this.allAnnotationBubbles, function(i, e) { + e.redrawBubble(); + }); + } +} + + +// find the previous/next breakpoint to c or return -1 if it doesn't exist +ExecutionVisualizer.prototype.findPrevBreakpoint = function() { + var myViz = this; + var c = myViz.curInstr; + + if (myViz.sortedBreakpointsList.length == 0) { + return -1; + } + else { + for (var i = 1; i < myViz.sortedBreakpointsList.length; i++) { + var prev = myViz.sortedBreakpointsList[i-1]; + var cur = myViz.sortedBreakpointsList[i]; + if (c <= prev) + return -1; + if (cur >= c) + return prev; + } + + // final edge case: + var lastElt = myViz.sortedBreakpointsList[myViz.sortedBreakpointsList.length - 1]; + return (lastElt < c) ? lastElt : -1; + } +} + +ExecutionVisualizer.prototype.findNextBreakpoint = function() { + var myViz = this; + var c = myViz.curInstr; + + if (myViz.sortedBreakpointsList.length == 0) { + return -1; + } + // usability hack: if you're currently on a breakpoint, then + // single-step forward to the next execution point, NOT the next + // breakpoint. it's often useful to see what happens when the line + // at a breakpoint executes. + else if ($.inArray(c, myViz.sortedBreakpointsList) >= 0) { + return c + 1; + } + else { + for (var i = 0; i < myViz.sortedBreakpointsList.length - 1; i++) { + var cur = myViz.sortedBreakpointsList[i]; + var next = myViz.sortedBreakpointsList[i+1]; + if (c < cur) + return cur; + if (cur <= c && c < next) // subtle + return next; + } + + // final edge case: + var lastElt = myViz.sortedBreakpointsList[myViz.sortedBreakpointsList.length - 1]; + return (lastElt > c) ? lastElt : -1; + } +} + + +// returns true if action successfully taken +ExecutionVisualizer.prototype.stepForward = function() { + var myViz = this; + + if (myViz.editAnnotationMode) { + return; + } + + if (myViz.curInstr < myViz.curTrace.length - 1) { + // if there is a next breakpoint, then jump to it ... + if (myViz.sortedBreakpointsList.length > 0) { + var nextBreakpoint = myViz.findNextBreakpoint(); + if (nextBreakpoint != -1) + myViz.curInstr = nextBreakpoint; + else + myViz.curInstr += 1; // prevent "getting stuck" on a solitary breakpoint + } + else { + myViz.curInstr += 1; + } + myViz.updateOutput(true); + return true; + } + + return false; +} + +// returns true if action successfully taken +ExecutionVisualizer.prototype.stepBack = function() { + var myViz = this; + + if (myViz.editAnnotationMode) { + return; + } + + if (myViz.curInstr > 0) { + // if there is a prev breakpoint, then jump to it ... + if (myViz.sortedBreakpointsList.length > 0) { + var prevBreakpoint = myViz.findPrevBreakpoint(); + if (prevBreakpoint != -1) + myViz.curInstr = prevBreakpoint; + else + myViz.curInstr -= 1; // prevent "getting stuck" on a solitary breakpoint + } + else { + myViz.curInstr -= 1; + } + myViz.updateOutput(); + return true; + } + + return false; +} + + +ExecutionVisualizer.prototype.renderPyCodeOutput = function() { + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + + // initialize! + this.breakpoints = d3.map(); + this.sortedBreakpointsList = []; + this.hoverBreakpoints = d3.map(); + + // an array of objects with the following fields: + // 'text' - the text of the line of code + // 'lineNumber' - one-indexed (always the array index + 1) + // 'executionPoints' - an ordered array of zero-indexed execution points where this line was executed + // 'breakpointHere' - has a breakpoint been set here? + this.codeOutputLines = []; + + + function renderSliderBreakpoints() { + myViz.domRoot.find("#executionSliderFooter").empty(); + + // I originally didn't want to delete and re-create this overlay every time, + // but if I don't do so, there are weird flickering artifacts with clearing + // the SVG container; so it's best to just delete and re-create the container each time + var sliderOverlay = myViz.domRootD3.select('#executionSliderFooter') + .append('svg') + .attr('id', 'sliderOverlay') + .attr('width', myViz.domRoot.find('#executionSlider').width()) + .attr('height', 12); + + var xrange = d3.scale.linear() + .domain([0, myViz.curTrace.length - 1]) + .range([0, myViz.domRoot.find('#executionSlider').width()]); + + sliderOverlay.selectAll('rect') + .data(myViz.sortedBreakpointsList) + .enter().append('rect') + .attr('x', function(d, i) { + // make the edge cases look decent + if (d == 0) { + return 0; + } + else { + return xrange(d) - 3; + } + }) + .attr('y', 0) + .attr('width', 2) + .attr('height', 12) + .style('fill', function(d) { + if (myViz.hoverBreakpoints.has(d)) { + return hoverBreakpointColor; + } + else { + return breakpointColor; + } + }); + } + + function _getSortedBreakpointsList() { + var ret = []; + myViz.breakpoints.forEach(function(k, v) { + ret.push(Number(k)); // these should be NUMBERS, not strings + }); + ret.sort(function(x,y){return x-y}); // WTF, javascript sort is lexicographic by default! + return ret; + } + + function addToBreakpoints(executionPoints) { + $.each(executionPoints, function(i, ep) { + myViz.breakpoints.set(ep, 1); + }); + myViz.sortedBreakpointsList = _getSortedBreakpointsList(); + } + + function removeFromBreakpoints(executionPoints) { + $.each(executionPoints, function(i, ep) { + myViz.breakpoints.remove(ep); + }); + myViz.sortedBreakpointsList = _getSortedBreakpointsList(); + } + + + function setHoverBreakpoint(t) { + var exePts = d3.select(t).datum().executionPoints; + + // don't do anything if exePts is empty + // (i.e., this line was never executed) + if (!exePts || exePts.length == 0) { + return; + } + + myViz.hoverBreakpoints = d3.map(); + $.each(exePts, function(i, ep) { + // don't add redundant entries + if (!myViz.breakpoints.has(ep)) { + myViz.hoverBreakpoints.set(ep, 1); + } + }); + + addToBreakpoints(exePts); + renderSliderBreakpoints(); + } + + + function setBreakpoint(t) { + var exePts = d3.select(t).datum().executionPoints; + + // don't do anything if exePts is empty + // (i.e., this line was never executed) + if (!exePts || exePts.length == 0) { + return; + } + + addToBreakpoints(exePts); + + // remove from hoverBreakpoints so that slider display immediately changes color + $.each(exePts, function(i, ep) { + myViz.hoverBreakpoints.remove(ep); + }); + + d3.select(t.parentNode).select('td.lineNo').style('color', breakpointColor); + d3.select(t.parentNode).select('td.lineNo').style('font-weight', 'bold'); + + renderSliderBreakpoints(); + } + + function unsetBreakpoint(t) { + var exePts = d3.select(t).datum().executionPoints; + + // don't do anything if exePts is empty + // (i.e., this line was never executed) + if (!exePts || exePts.length == 0) { + return; + } + + removeFromBreakpoints(exePts); + + var lineNo = d3.select(t).datum().lineNumber; + + renderSliderBreakpoints(); + } + + var lines = this.curInputCode.split('\n'); + + for (var i = 0; i < lines.length; i++) { + var cod = lines[i]; + + var n = {}; + n.text = cod; + n.lineNumber = i + 1; + n.executionPoints = []; + n.breakpointHere = false; + + $.each(this.curTrace, function(j, elt) { + if (elt.line == n.lineNumber) { + n.executionPoints.push(j); + } + }); + + + // if there is a comment containing 'breakpoint' and this line was actually executed, + // then set a breakpoint on this line + var breakpointInComment = false; + var toks = cod.split('#'); + for (var j = 1 /* start at index 1, not 0 */; j < toks.length; j++) { + if (toks[j].indexOf('breakpoint') != -1) { + breakpointInComment = true; + } + } + + if (breakpointInComment && n.executionPoints.length > 0) { + n.breakpointHere = true; + addToBreakpoints(n.executionPoints); + } + + this.codeOutputLines.push(n); + } + + + myViz.domRoot.find('#pyCodeOutputDiv').empty(); + + // maps this.codeOutputLines to both table columns + var codeOutputD3 = this.domRootD3.select('#pyCodeOutputDiv') + .append('table') + .attr('id', 'pyCodeOutput') + .selectAll('tr') + .data(this.codeOutputLines) + .enter().append('tr') + .selectAll('td') + .data(function(d, i){return [d, d] /* map full data item down both columns */;}) + .enter().append('td') + .attr('class', function(d, i) { + if (i == 0) { + return 'lineNo'; + } + else { + return 'cod'; + } + }) + .attr('id', function(d, i) { + if (i == 0) { + return 'lineNo' + d.lineNumber; + } + else { + return myViz.generateID('cod' + d.lineNumber); // make globally unique (within the page) + } + }) + .html(function(d, i) { + if (i == 0) { + return d.lineNumber; + } + else { + return htmlspecialchars(d.text); + } + }); + + // create a left-most gutter td that spans ALL rows ... + // (NB: valign="top" is CRUCIAL for this to work in IE) + if (myViz.params.arrowLines) { + myViz.domRoot.find('#pyCodeOutput tr:first') + .prepend(''); + + // create prevLineArrow and curLineArrow + myViz.domRootD3.select('svg#leftCodeGutterSVG') + .append('polygon') + .attr('id', 'prevLineArrow') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', lightArrowColor); + + myViz.domRootD3.select('svg#leftCodeGutterSVG') + .append('polygon') + .attr('id', 'curLineArrow') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', darkArrowColor); + } + + // 2012-09-05: Disable breakpoints for now to simplify UX + /* + if (!this.params.embeddedMode) { + codeOutputD3.style('cursor', function(d, i) {return 'pointer'}) + .on('mouseover', function() { + setHoverBreakpoint(this); + }) + .on('mouseout', function() { + myViz.hoverBreakpoints = d3.map(); + + var breakpointHere = d3.select(this).datum().breakpointHere; + + if (!breakpointHere) { + unsetBreakpoint(this); + } + + renderSliderBreakpoints(); // get rid of hover breakpoint colors + }) + .on('mousedown', function() { + // don't do anything if exePts is empty + // (i.e., this line was never executed) + var exePts = d3.select(this).datum().executionPoints; + if (!exePts || exePts.length == 0) { + return; + } + + // toggle breakpoint + d3.select(this).datum().breakpointHere = !d3.select(this).datum().breakpointHere; + + var breakpointHere = d3.select(this).datum().breakpointHere; + if (breakpointHere) { + setBreakpoint(this); + } + else { + unsetBreakpoint(this); + } + }); + + renderSliderBreakpoints(); // renders breakpoints written in as code comments + } + */ + +} + + +// takes a string inputStr and returns an HTML version with +// the characters from [highlightIndex, highlightIndex+extent) highlighted with +// a span of class highlightCssClass +function htmlWithHighlight(inputStr, highlightInd, extent, highlightCssClass) { + var prefix = ''; + if (highlightInd > 0) { + prefix = inputStr.slice(0, highlightInd); + } + + var highlightedChars = inputStr.slice(highlightInd, highlightInd + extent); + + var suffix = ''; + if (highlightInd + extent < inputStr.length) { + suffix = inputStr.slice(highlightInd + extent, inputStr.length); + } + + // ... then set the current line to lineHTML + var lineHTML = htmlspecialchars(prefix) + + '' + + htmlspecialchars(highlightedChars) + + '' + + htmlspecialchars(suffix); + return lineHTML; +} + + +// This function is called every time the display needs to be updated +// smoothTransition is OPTIONAL! +ExecutionVisualizer.prototype.updateOutput = function(smoothTransition) { + assert(this.curTrace); + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + // there's no point in re-rendering if this pane isn't even visible in the first place! + if (!myViz.domRoot.is(':visible')) { + return; + } + + + // really nitpicky!!! gets the difference in width between the code display + // and the maximum width of its enclosing div + myViz.codeHorizontalOverflow = myViz.domRoot.find('#pyCodeOutput').width() - myViz.domRoot.find('#pyCodeOutputDiv').width(); + // should always be positive + if (myViz.codeHorizontalOverflow < 0) { + myViz.codeHorizontalOverflow = 0; + } + + + // crucial resets for annotations (TODO: kludgy) + myViz.destroyAllAnnotationBubbles(); + myViz.initStepAnnotation(); + + + var prevDataVizHeight = myViz.domRoot.find('#dataViz').height(); + + + var gutterSVG = myViz.domRoot.find('svg#leftCodeGutterSVG'); + + // one-time initialization of the left gutter + // (we often can't do this earlier since the entire pane + // might be invisible and hence returns a height of zero or NaN + // -- the exact format depends on browser) + if (!myViz.leftGutterSvgInitialized && myViz.params.arrowLines) { + // set the gutter's height to match that of its parent + gutterSVG.height(gutterSVG.parent().height()); + + var firstRowOffsetY = myViz.domRoot.find('table#pyCodeOutput tr:first').offset().top; + + // first take care of edge case when there's only one line ... + myViz.codeRowHeight = myViz.domRoot.find('table#pyCodeOutput td.cod:first').height(); + + // ... then handle the (much more common) multi-line case ... + // this weird contortion is necessary to get the accurate row height on Internet Explorer + // (simpler methods work on all other major browsers, erghhhhhh!!!) + if (this.codeOutputLines && this.codeOutputLines.length > 1) { + var secondRowOffsetY = myViz.domRoot.find('table#pyCodeOutput tr:nth-child(2)').offset().top; + myViz.codeRowHeight = secondRowOffsetY - firstRowOffsetY; + } + + assert(myViz.codeRowHeight > 0); + + var gutterOffsetY = gutterSVG.offset().top; + var teenyAdjustment = gutterOffsetY - firstRowOffsetY; + + // super-picky detail to adjust the vertical alignment of arrows so that they line up + // well with the pointed-to code text ... + // (if you want to manually adjust tableTop, then ~5 is a reasonable number) + myViz.arrowOffsetY = Math.floor((myViz.codeRowHeight / 2) - (SVG_ARROW_HEIGHT / 2)) - teenyAdjustment; + + myViz.leftGutterSvgInitialized = true; + } + + if (myViz.params.arrowLines) { + assert(myViz.arrowOffsetY !== undefined); + assert(myViz.codeRowHeight !== undefined); + assert(0 <= myViz.arrowOffsetY && myViz.arrowOffsetY <= myViz.codeRowHeight); + } + + // call the callback if necessary (BEFORE rendering) + if (this.params.updateOutputCallback) { + this.params.updateOutputCallback(this); + } + + + var curEntry = this.curTrace[this.curInstr]; + var hasError = false; + // bnm Render a question + if (curEntry.question) { + //alert(curEntry.question.text); + + $('#'+curEntry.question.div).modal({position:["25%","50%"]}); + } + + // render VCR controls: + var totalInstrs = this.curTrace.length; + + var isLastInstr = (this.curInstr == (totalInstrs-1)); + + var vcrControls = myViz.domRoot.find("#vcrControls"); + + if (isLastInstr) { + if (this.promptForUserInput || this.promptForMouseInput) { + vcrControls.find("#curInstr").html('' + this.userInputPromptStr + ''); + + // don't do smooth transition since prompt() is modal so it doesn't + // give the animation background thread time to run + smoothTransition = false; + } + else if (this.instrLimitReached) { + vcrControls.find("#curInstr").html("Instruction limit reached"); + } + else { + vcrControls.find("#curInstr").html("Program terminated"); + } + } + else { + vcrControls.find("#curInstr").html("Step " + + String(this.curInstr + 1) + + " of " + String(totalInstrs-1)); + } + + + vcrControls.find("#jmpFirstInstr").attr("disabled", false); + vcrControls.find("#jmpStepBack").attr("disabled", false); + vcrControls.find("#jmpStepFwd").attr("disabled", false); + vcrControls.find("#jmpLastInstr").attr("disabled", false); + + if (this.curInstr == 0) { + vcrControls.find("#jmpFirstInstr").attr("disabled", true); + vcrControls.find("#jmpStepBack").attr("disabled", true); + } + if (isLastInstr) { + vcrControls.find("#jmpLastInstr").attr("disabled", true); + vcrControls.find("#jmpStepFwd").attr("disabled", true); + } + + + // PROGRAMMATICALLY change the value, so evt.originalEvent should be undefined + myViz.domRoot.find('#executionSlider').slider('value', this.curInstr); + + + // render error (if applicable): + if (curEntry.event == 'exception' || + curEntry.event == 'uncaught_exception') { + assert(curEntry.exception_msg); + + if (curEntry.exception_msg == "Unknown error") { + myViz.domRoot.find("#errorOutput").html('Unknown error: Please email a bug report to philip@pgbovine.net'); + } + else { + myViz.domRoot.find("#errorOutput").html(htmlspecialchars(curEntry.exception_msg)); + } + + myViz.domRoot.find("#errorOutput").show(); + + hasError = true; + } + else { + if (!this.instrLimitReached) { // ugly, I know :/ + myViz.domRoot.find("#errorOutput").hide(); + } + } + + + function highlightCodeLine() { + /* if instrLimitReached, then treat like a normal non-terminating line */ + var isTerminated = (!myViz.instrLimitReached && isLastInstr); + + var pcod = myViz.domRoot.find('#pyCodeOutputDiv'); + + var curLineNumber = null; + var prevLineNumber = null; + + // only relevant if in myViz.pyCrazyMode + var prevColumn = undefined; + var prevExprStartCol = undefined; + var prevExprWidth = undefined; + + var curIsReturn = (curEntry.event == 'return'); + var prevIsReturn = false; + + + if (myViz.curInstr > 0) { + prevLineNumber = myViz.curTrace[myViz.curInstr - 1].line; + prevIsReturn = (myViz.curTrace[myViz.curInstr - 1].event == 'return'); + + if (myViz.pyCrazyMode) { + var p = myViz.curTrace[myViz.curInstr - 1]; + prevColumn = p.column; + // if these don't exist, set reasonable defaults + prevExprStartCol = (p.expr_start_col !== undefined) ? p.expr_start_col : p.column; + prevExprWidth = (p.expr_width !== undefined) ? p.expr_width : 1; + } + } + + curLineNumber = curEntry.line; + + if (myViz.pyCrazyMode) { + var curColumn = curEntry.column; + + // if these don't exist, set reasonable defaults + var curExprStartCol = (curEntry.expr_start_col !== undefined) ? curEntry.expr_start_col : curColumn; + var curExprWidth = (curEntry.expr_width !== undefined) ? curEntry.expr_width : 1; + + var curLineInfo = myViz.codeOutputLines[curLineNumber - 1]; + assert(curLineInfo.lineNumber == curLineNumber); + var codeAtLine = curLineInfo.text; + + // shotgun approach: reset ALL lines to their natural (unbolded) state + $.each(myViz.codeOutputLines, function(i, e) { + var d = myViz.generateID('cod' + e.lineNumber); + myViz.domRoot.find('#' + d).html(htmlspecialchars(e.text)); + }); + + + // Three possible cases: + // 1. previous and current trace entries are on the SAME LINE + // 2. previous and current trace entries are on different lines + // 3. there is no previous trace entry + + if (prevLineNumber == curLineNumber) { + var curLineHTML = ''; + + // tricky tricky! + // generate a combined line with both previous and current + // columns highlighted + + for (var i = 0; i < codeAtLine.length; i++) { + var isCur = (curExprStartCol <= i) && (i < curExprStartCol + curExprWidth); + var isPrev = (prevExprStartCol <= i) && (i < prevExprStartCol + prevExprWidth); + + var htmlEscapedChar = htmlspecialchars(codeAtLine[i]); + + if (isCur && isPrev) { + curLineHTML += '' + htmlEscapedChar + ''; + } + else if (isPrev) { + curLineHTML += '' + htmlEscapedChar + ''; + } + else if (isCur) { + curLineHTML += '' + htmlEscapedChar + ''; + } + else { + curLineHTML += htmlEscapedChar; + } + } + + assert(curLineHTML); + myViz.domRoot.find('#' + myViz.generateID('cod' + curLineNumber)).html(curLineHTML); + } + else { + if (prevLineNumber) { + var prevLineInfo = myViz.codeOutputLines[prevLineNumber - 1]; + var prevLineHTML = htmlWithHighlight(prevLineInfo.text, prevExprStartCol, prevExprWidth, 'pycrazy-highlight-prev'); + myViz.domRoot.find('#' + myViz.generateID('cod' + prevLineNumber)).html(prevLineHTML); + } + var curLineHTML = htmlWithHighlight(codeAtLine, curExprStartCol, curExprWidth, 'pycrazy-highlight-cur'); + myViz.domRoot.find('#' + myViz.generateID('cod' + curLineNumber)).html(curLineHTML); + } + } + + // on 'return' events, give a bit more of a vertical nudge to show that + // the arrow is aligned with the 'bottom' of the line ... + var prevVerticalNudge = prevIsReturn ? Math.floor(myViz.codeRowHeight / 2) : 0; + var curVerticalNudge = curIsReturn ? Math.floor(myViz.codeRowHeight / 2) : 0; + + + // edge case for the final instruction :0 + if (isTerminated && !hasError) { + // don't show redundant arrows on the same line when terminated ... + if (prevLineNumber == curLineNumber) { + curLineNumber = null; + } + // otherwise have a smaller vertical nudge (to fit at bottom of display table) + else { + curVerticalNudge = curVerticalNudge - 2; + } + } + + if (myViz.params.arrowLines) { + if (prevLineNumber) { + var pla = myViz.domRootD3.select('#prevLineArrow'); + var translatePrevCmd = 'translate(0, ' + (((prevLineNumber - 1) * myViz.codeRowHeight) + myViz.arrowOffsetY + prevVerticalNudge) + ')'; + + if (smoothTransition) { + pla + .transition() + .duration(200) + .attr('fill', 'white') + .each('end', function() { + pla + .attr('transform', translatePrevCmd) + .attr('fill', lightArrowColor); + + gutterSVG.find('#prevLineArrow').show(); // show at the end to avoid flickering + }); + } + else { + pla.attr('transform', translatePrevCmd) + gutterSVG.find('#prevLineArrow').show(); + } + + } + else { + gutterSVG.find('#prevLineArrow').hide(); + } + + if (curLineNumber) { + var cla = myViz.domRootD3.select('#curLineArrow'); + var translateCurCmd = 'translate(0, ' + (((curLineNumber - 1) * myViz.codeRowHeight) + myViz.arrowOffsetY + curVerticalNudge) + ')'; + + if (smoothTransition) { + cla + .transition() + .delay(200) + .duration(250) + .attr('transform', translateCurCmd); + } + else { + cla.attr('transform', translateCurCmd); + } + + gutterSVG.find('#curLineArrow').show(); + } + else { + gutterSVG.find('#curLineArrow').hide(); + } + } + + myViz.domRootD3.selectAll('#pyCodeOutputDiv td.cod') + .style('border-top', function(d) { + if (hasError && (d.lineNumber == curEntry.line)) { + return '1px solid ' + errorColor; + } + else { + return ''; + } + }) + .style('border-bottom', function(d) { + // COPY AND PASTE ALERT! + if (hasError && (d.lineNumber == curEntry.line)) { + return '1px solid ' + errorColor; + } + else { + return ''; + } + }); + + // returns True iff lineNo is visible in pyCodeOutputDiv + function isOutputLineVisible(lineNo) { + var lineNoTd = myViz.domRoot.find('#lineNo' + lineNo); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + // add a few pixels of fudge factor on the bottom end due to bottom scrollbar + return (PO <= LO) && (LO < (PO + H - 30)); + } + + + // smoothly scroll pyCodeOutputDiv so that the given line is at the center + function scrollCodeOutputToLine(lineNo) { + var lineNoTd = myViz.domRoot.find('#lineNo' + lineNo); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + pcod.stop(); // first stop all previously-queued animations + pcod.animate({scrollTop: (ST + (LO - PO - (Math.round(H / 2))))}, 300); + } + + if (myViz.params.highlightLines) { + myViz.domRoot.find('#pyCodeOutputDiv td.cod').removeClass('highlight-prev'); + myViz.domRoot.find('#pyCodeOutputDiv td.cod').removeClass('highlight-cur'); + if (curLineNumber) + myViz.domRoot.find('#'+myViz.generateID('cod'+curLineNumber)).addClass('highlight-cur'); + if (prevLineNumber) + myViz.domRoot.find('#'+myViz.generateID('cod'+prevLineNumber)).addClass('highlight-prev'); + } + + + // smoothly scroll code display + if (!isOutputLineVisible(curEntry.line)) { + scrollCodeOutputToLine(curEntry.line); + } + + } // end of highlightCodeLine + + + // render code output: + if (curEntry.line) { + highlightCodeLine(); + } + + // render stdout: + + // if there isn't anything in curEntry.stdout, don't even bother + // displaying the pane + if (curEntry.stdout) { + this.domRoot.find('#progOutputs').show(); + + // keep original horizontal scroll level: + var oldLeft = myViz.domRoot.find("#pyStdout").scrollLeft(); + myViz.domRoot.find("#pyStdout").val(curEntry.stdout); + + myViz.domRoot.find("#pyStdout").scrollLeft(oldLeft); + // scroll to bottom, though: + myViz.domRoot.find("#pyStdout").scrollTop(myViz.domRoot.find("#pyStdout")[0].scrollHeight); + } + else { + this.domRoot.find('#progOutputs').hide(); + } + + + // inject user-specified HTML/CSS/JS output: + // YIKES -- HUGE CODE INJECTION VULNERABILITIES :O + myViz.domRoot.find("#htmlOutputDiv").empty(); + if (curEntry.html_output) { + if (curEntry.css_output) { + myViz.domRoot.find("#htmlOutputDiv").append(''); + } + myViz.domRoot.find("#htmlOutputDiv").append(curEntry.html_output); + + // inject and run JS *after* injecting HTML and CSS + if (curEntry.js_output) { + // NB: when jQuery injects JS, it executes the code immediately + // and then removes the entire '); + } + } + + + // finally, render all of the data structures + this.renderDataStructures(); + + this.enterViewAnnotationsMode(); // ... and render optional annotations (if any exist) + + + // call the callback if necessary (BEFORE rendering) + if (myViz.domRoot.find('#dataViz').height() != prevDataVizHeight) { + if (this.params.heightChangeCallback) { + this.params.heightChangeCallback(this); + } + } + + + if (isLastInstr && this.executeCodeWithRawInputFunc) { + if (this.promptForUserInput) { + // blocking prompt dialog! + // put a default string of '' or else it looks ugly in IE + var userInput = prompt(this.userInputPromptStr, ''); + + // if you hit 'Cancel' in prompt(), it returns null + if (userInput !== null) { + // after executing, jump back to this.curInstr to give the + // illusion of continuity + this.executeCodeWithRawInputFunc(userInput, this.curInstr); + } + } + } + +} // end of updateOutput + + +// Pre-compute the layout of top-level heap objects for ALL execution +// points as soon as a trace is first loaded. The reason why we want to +// do this is so that when the user steps through execution points, the +// heap objects don't "jiggle around" (i.e., preserving positional +// invariance). Also, if we set up the layout objects properly, then we +// can take full advantage of d3 to perform rendering and transitions. + +ExecutionVisualizer.prototype.precomputeCurTraceLayouts = function() { + + // curTraceLayouts is a list of top-level heap layout "objects" with the + // same length as curTrace after it's been fully initialized. Each + // element of curTraceLayouts is computed from the contents of its + // immediate predecessor, thus ensuring that objects don't "jiggle + // around" between consecutive execution points. + // + // Each top-level heap layout "object" is itself a LIST of LISTS of + // object IDs, where each element of the outer list represents a row, + // and each element of the inner list represents columns within a + // particular row. Each row can have a different number of columns. Most + // rows have exactly ONE column (representing ONE object ID), but rows + // containing 1-D linked data structures have multiple columns. Each + // inner list element looks something like ['row1', 3, 2, 1] where the + // first element is a unique row ID tag, which is used as a key for d3 to + // preserve "object constancy" for updates, transitions, etc. The row ID + // is derived from the FIRST object ID inserted into the row. Since all + // object IDs are unique, all row IDs will also be unique. + + /* This is a good, simple example to test whether objects "jiggle" + + x = [1, [2, [3, None]]] + y = [4, [5, [6, None]]] + + x[1][1] = y[1] + + */ + this.curTraceLayouts = []; + this.curTraceLayouts.push([]); // pre-seed with an empty sentinel to simplify the code + + assert(this.curTrace.length > 0); + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + + $.each(this.curTrace, function(i, curEntry) { + var prevLayout = myViz.curTraceLayouts[myViz.curTraceLayouts.length - 1]; + + // make a DEEP COPY of prevLayout to use as the basis for curLine + var curLayout = $.extend(true /* deep copy */ , [], prevLayout); + + // initialize with all IDs from curLayout + var idsToRemove = d3.map(); + $.each(curLayout, function(i, row) { + for (var j = 1 /* ignore row ID tag */; j < row.length; j++) { + idsToRemove.set(row[j], 1); + } + }); + + var idsAlreadyLaidOut = d3.map(); // to prevent infinite recursion + + + function curLayoutIndexOf(id) { + for (var i = 0; i < curLayout.length; i++) { + var row = curLayout[i]; + var index = row.indexOf(id); + if (index > 0) { // index of 0 is impossible since it's the row ID tag + return {row: row, index: index} + } + } + return null; + } + + + function recurseIntoObject(id, curRow, newRow) { + //console.log('recurseIntoObject', id, + // $.extend(true /* make a deep copy */ , [], curRow), + // $.extend(true /* make a deep copy */ , [], newRow)); + + // heuristic for laying out 1-D linked data structures: check for enclosing elements that are + // structurally identical and then lay them out as siblings in the same "row" + var heapObj = curEntry.heap[id]; + assert(heapObj); + + if (heapObj[0] == 'LIST' || heapObj[0] == 'TUPLE' || heapObj[0] == 'SET') { + $.each(heapObj, function(ind, child) { + if (ind < 1) return; // skip type tag + + if (!isPrimitiveType(child)) { + var childID = getRefID(child); + if (structurallyEquivalent(heapObj, curEntry.heap[childID])) { + updateCurLayout(childID, curRow, newRow); + } + else if (myViz.disableHeapNesting) { + updateCurLayout(childID, [], []); + } + } + }); + } + else if (heapObj[0] == 'DICT') { + $.each(heapObj, function(ind, child) { + if (ind < 1) return; // skip type tag + + if (myViz.disableHeapNesting) { + var dictKey = child[0]; + if (!isPrimitiveType(dictKey)) { + var keyChildID = getRefID(dictKey); + updateCurLayout(keyChildID, [], []); + } + } + + var dictVal = child[1]; + if (!isPrimitiveType(dictVal)) { + var childID = getRefID(dictVal); + if (structurallyEquivalent(heapObj, curEntry.heap[childID])) { + updateCurLayout(childID, curRow, newRow); + } + else if (myViz.disableHeapNesting) { + updateCurLayout(childID, [], []); + } + } + }); + } + else if (heapObj[0] == 'INSTANCE' || heapObj[0] == 'CLASS') { + jQuery.each(heapObj, function(ind, child) { + var headerLength = (heapObj[0] == 'INSTANCE') ? 2 : 3; + if (ind < headerLength) return; + + if (myViz.disableHeapNesting) { + var instKey = child[0]; + if (!isPrimitiveType(instKey)) { + var keyChildID = getRefID(instKey); + updateCurLayout(keyChildID, [], []); + } + } + + var instVal = child[1]; + if (!isPrimitiveType(instVal)) { + var childID = getRefID(instVal); + if (structurallyEquivalent(heapObj, curEntry.heap[childID])) { + updateCurLayout(childID, curRow, newRow); + } + else if (myViz.disableHeapNesting) { + updateCurLayout(childID, [], []); + } + } + }); + } + } + + + // a krazy function! + // id - the new object ID to be inserted somewhere in curLayout + // (if it's not already in there) + // curRow - a row within curLayout where new linked list + // elements can be appended onto (might be null) + // newRow - a new row that might be spliced into curRow or appended + // as a new row in curLayout + function updateCurLayout(id, curRow, newRow) { + if (idsAlreadyLaidOut.has(id)) { + return; // PUNT! + } + + var curLayoutLoc = curLayoutIndexOf(id); + + var alreadyLaidOut = idsAlreadyLaidOut.has(id); + idsAlreadyLaidOut.set(id, 1); // unconditionally set now + + // if id is already in curLayout ... + if (curLayoutLoc) { + var foundRow = curLayoutLoc.row; + var foundIndex = curLayoutLoc.index; + + idsToRemove.remove(id); // this id is already accounted for! + + // very subtle ... if id hasn't already been handled in + // this iteration, then splice newRow into foundRow. otherwise + // (later) append newRow onto curLayout as a truly new row + if (!alreadyLaidOut) { + // splice the contents of newRow right BEFORE foundIndex. + // (Think about when you're trying to insert in id=3 into ['row1', 2, 1] + // to represent a linked list 3->2->1. You want to splice the 3 + // entry right before the 2 to form ['row1', 3, 2, 1]) + if (newRow.length > 1) { + var args = [foundIndex, 0]; + for (var i = 1; i < newRow.length; i++) { // ignore row ID tag + args.push(newRow[i]); + idsToRemove.remove(newRow[i]); + } + foundRow.splice.apply(foundRow, args); + + // remove ALL elements from newRow since they've all been accounted for + // (but don't reassign it away to an empty list, since the + // CALLER checks its value. TODO: how to get rid of this gross hack?!?) + newRow.splice(0, newRow.length); + } + } + + // recurse to find more top-level linked entries to append onto foundRow + recurseIntoObject(id, foundRow, []); + } + else { + // push id into newRow ... + if (newRow.length == 0) { + newRow.push('row' + id); // unique row ID (since IDs are unique) + } + newRow.push(id); + + // recurse to find more top-level linked entries ... + recurseIntoObject(id, curRow, newRow); + + + // if newRow hasn't been spliced into an existing row yet during + // a child recursive call ... + if (newRow.length > 0) { + if (curRow && curRow.length > 0) { + // append onto the END of curRow if it exists + for (var i = 1; i < newRow.length; i++) { // ignore row ID tag + curRow.push(newRow[i]); + } + } + else { + // otherwise push to curLayout as a new row + // + // TODO: this might not always look the best, since we might + // sometimes want to splice newRow in the MIDDLE of + // curLayout. Consider this example: + // + // x = [1,2,3] + // y = [4,5,6] + // x = [7,8,9] + // + // when the third line is executed, the arrows for x and y + // will be crossed (ugly!) since the new row for the [7,8,9] + // object is pushed to the end (bottom) of curLayout. The + // proper behavior is to push it to the beginning of + // curLayout where the old row for 'x' used to be. + curLayout.push($.extend(true /* make a deep copy */ , [], newRow)); + } + + // regardless, newRow is now accounted for, so clear it + for (var i = 1; i < newRow.length; i++) { // ignore row ID tag + idsToRemove.remove(newRow[i]); + } + newRow.splice(0, newRow.length); // kill it! + } + + } + } + + + // iterate through all globals and ordered stack frames and call updateCurLayout + $.each(curEntry.ordered_globals, function(i, varname) { + var val = curEntry.globals[varname]; + if (val !== undefined) { // might not be defined at this line, which is OKAY! + if (!isPrimitiveType(val)) { + var id = getRefID(val); + updateCurLayout(id, null, []); + } + } + }); + + $.each(curEntry.stack_to_render, function(i, frame) { + $.each(frame.ordered_varnames, function(xxx, varname) { + var val = frame.encoded_locals[varname]; + + if (!isPrimitiveType(val)) { + var id = getRefID(val); + updateCurLayout(id, null, []); + } + }); + }); + + + // iterate through remaining elements of idsToRemove and REMOVE them from curLayout + idsToRemove.forEach(function(id, xxx) { + id = Number(id); // keys are stored as strings, so convert!!! + $.each(curLayout, function(rownum, row) { + var ind = row.indexOf(id); + if (ind > 0) { // remember that index 0 of the row is the row ID tag + row.splice(ind, 1); + } + }); + }); + + // now remove empty rows (i.e., those with only a row ID tag) from curLayout + curLayout = curLayout.filter(function(row) {return row.length > 1}); + + myViz.curTraceLayouts.push(curLayout); + }); + + this.curTraceLayouts.splice(0, 1); // remove seeded empty sentinel element + assert (this.curTrace.length == this.curTraceLayouts.length); +} + + +var heapPtrSrcRE = /__heap_pointer_src_/; + +// The "3.0" version of renderDataStructures renders variables in +// a stack, values in a separate heap, and draws line connectors +// to represent both stack->heap object references and, more importantly, +// heap->heap references. This version was created in August 2012. +// +// The "2.0" version of renderDataStructures renders variables in +// a stack and values in a separate heap, with data structure aliasing +// explicitly represented via line connectors (thanks to jsPlumb lib). +// This version was created in September 2011. +// +// The ORIGINAL "1.0" version of renderDataStructures +// was created in January 2010 and rendered variables and values +// INLINE within each stack frame without any explicit representation +// of data structure aliasing. That is, aliased objects were rendered +// multiple times, and a unique ID label was used to identify aliases. +ExecutionVisualizer.prototype.renderDataStructures = function() { + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + var curEntry = this.curTrace[this.curInstr]; + var curToplevelLayout = this.curTraceLayouts[this.curInstr]; + + // for simplicity (but sacrificing some performance), delete all + // connectors and redraw them from scratch. doing so avoids mysterious + // jsPlumb connector alignment issues when the visualizer's enclosing + // div contains, say, a "position: relative;" CSS tag + // (which happens in the IPython Notebook) + var existingConnectionEndpointIDs = d3.map(); + myViz.jsPlumbInstance.select({scope: 'varValuePointer'}).each(function(c) { + // This is VERY crude, but to prevent multiple redundant HEAP->HEAP + // connectors from being drawn with the same source and origin, we need to first + // DELETE ALL existing HEAP->HEAP connections, and then re-render all of + // them in each call to this function. The reason why we can't safely + // hold onto them is because there's no way to guarantee that the + // *__heap_pointer_src_ IDs are consistent across execution points. + // + // thus, only add to existingConnectionEndpointIDs if this is NOT heap->heap + if (!c.sourceId.match(heapPtrSrcRE)) { + existingConnectionEndpointIDs.set(c.sourceId, c.targetId); + } + }); + + var existingParentPointerConnectionEndpointIDs = d3.map(); + myViz.jsPlumbInstance.select({scope: 'frameParentPointer'}).each(function(c) { + existingParentPointerConnectionEndpointIDs.set(c.sourceId, c.targetId); + }); + + + // Heap object rendering phase: + + + // Key: CSS ID of the div element representing the stack frame variable + // (for stack->heap connections) or heap object (for heap->heap connections) + // the format is: '__heap_pointer_src_' + // Value: CSS ID of the div element representing the value rendered in the heap + // (the format is: '__heap_object_') + // + // The reason we need to prepend this.visualizerID is because jsPlumb needs + // GLOBALLY UNIQUE IDs for use as connector endpoints. + + // the only elements in these sets are NEW elements to be rendered in this + // particular call to renderDataStructures. + var connectionEndpointIDs = d3.map(); + var heapConnectionEndpointIDs = d3.map(); // subset of connectionEndpointIDs for heap->heap connections + + // analogous to connectionEndpointIDs, except for environment parent pointers + var parentPointerConnectionEndpointIDs = d3.map(); + + var heap_pointer_src_id = 1; // increment this to be unique for each heap_pointer_src_* + + + var renderedObjectIDs = d3.map(); + + // count everything in curToplevelLayout as already rendered since we will render them + // in d3 .each() statements + $.each(curToplevelLayout, function(xxx, row) { + for (var i = 0; i < row.length; i++) { + renderedObjectIDs.set(row[i], 1); + } + }); + + + + // use d3 to render the heap by mapping curToplevelLayout into + // and '); + var headerTr = tbl.find('tr:first'); + var contentTr = tbl.find('tr:last'); + $.each(obj, function(ind, val) { + if (ind < 1) return; // skip type tag and ID entry + + // add a new column and then pass in that newly-added column + // as d3DomElement to the recursive call to child: + headerTr.append(''); + headerTr.find('td:last').append(ind - 1); + + contentTr.append(''); + renderNestedObject(val, contentTr.find('td:last')); + }); + } + else if (obj[0] == 'SET') { + // create an R x C matrix: + var numElts = obj.length - 1; + + // gives roughly a 3x5 rectangular ratio, square is too, err, + // 'square' and boring + var numRows = Math.round(Math.sqrt(numElts)); + if (numRows > 3) { + numRows -= 1; + } + + var numCols = Math.round(numElts / numRows); + // round up if not a perfect multiple: + if (numElts % numRows) { + numCols += 1; + } + + jQuery.each(obj, function(ind, val) { + if (ind < 1) return; // skip 'SET' tag + + if (((ind - 1) % numCols) == 0) { + tbl.append(''); + } + + var curTr = tbl.find('tr:last'); + curTr.append(''); + renderNestedObject(val, curTr.find('td:last')); + }); + } + else if (obj[0] == 'DICT') { + $.each(obj, function(ind, kvPair) { + if (ind < 1) return; // skip 'DICT' tag + + tbl.append(''); + var newRow = tbl.find('tr:last'); + var keyTd = newRow.find('td:first'); + var valTd = newRow.find('td:last'); + + var key = kvPair[0]; + var val = kvPair[1]; + + renderNestedObject(key, keyTd); + renderNestedObject(val, valTd); + }); + } + } + } + else if (obj[0] == 'INSTANCE' || obj[0] == 'CLASS') { + var isInstance = (obj[0] == 'INSTANCE'); + var headerLength = isInstance ? 2 : 3; + + assert(obj.length >= headerLength); + + if (isInstance) { + d3DomElement.append('
    ' + typeLabelPrefix + obj[1] + ' instance
    '); + } + else { + var superclassStr = ''; + if (obj[2].length > 0) { + superclassStr += ('[extends ' + obj[2].join(', ') + '] '); + } + d3DomElement.append('
    ' + typeLabelPrefix + obj[1] + ' class ' + superclassStr + '
    '); + } + + // right now, let's NOT display class members, since that clutters + // up the display too much. in the future, consider displaying + // class members in a pop-up pane on mouseover or mouseclick + // actually nix what i just said above ... + //if (!isInstance) return; + + if (obj.length > headerLength) { + var lab = isInstance ? 'inst' : 'class'; + d3DomElement.append('
    elements + + var heapRows = myViz.domRootD3.select('#heap') + .selectAll('table.heapRow') + .data(curToplevelLayout, function(objLst) { + return objLst[0]; // return first element, which is the row ID tag + }); + + + // insert new heap rows + heapRows.enter().append('table') + //.each(function(objLst, i) {console.log('NEW ROW:', objLst, i);}) + .attr('class', 'heapRow'); + + // delete a heap row + var hrExit = heapRows.exit(); + + if (myViz.enableTransitions) { + hrExit + .style('opacity', '1') + .transition() + .style('opacity', '0') + .duration(500) + .each('end', function() { + hrExit + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + myViz.redrawConnectors(); + }); + } + else { + hrExit + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + } + + + // update an existing heap row + var toplevelHeapObjects = heapRows + //.each(function(objLst, i) { console.log('UPDATE ROW:', objLst, i); }) + .selectAll('td.toplevelHeapObject') + .data(function(d, i) {return d.slice(1, d.length);}, /* map over each row, skipping row ID tag */ + function(objID) {return objID;} /* each object ID is unique for constancy */); + + // insert a new toplevelHeapObject + var tlhEnter = toplevelHeapObjects.enter().append('td') + .attr('class', 'toplevelHeapObject') + .attr('id', function(d, i) {return 'toplevel_heap_object_' + d;}); + + if (myViz.enableTransitions) { + tlhEnter + .style('opacity', '0') + .style('border-color', 'red') + .transition() + .style('opacity', '1') /* fade in */ + .duration(700) + .each('end', function() { + tlhEnter.transition() + .style('border-color', 'white') /* kill border */ + .duration(300) + }); + } + + // remember that the enter selection is added to the update + // selection so that we can process it later ... + + // update a toplevelHeapObject + toplevelHeapObjects + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .each(function(objID, i) { + //console.log('NEW/UPDATE ELT', objID); + + // TODO: add a smoother transition in the future + // Right now, just delete the old element and render a new one in its place + $(this).empty(); + renderCompoundObject(objID, $(this), true); + }); + + // delete a toplevelHeapObject + var tlhExit = toplevelHeapObjects.exit(); + + if (myViz.enableTransitions) { + tlhExit.transition() + .style('opacity', '0') /* fade out */ + .duration(500) + .each('end', function() { + tlhExit + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + myViz.redrawConnectors(); + }); + } + else { + tlhExit + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + } + + + function renderNestedObject(obj, d3DomElement) { + if (isPrimitiveType(obj)) { + renderPrimitiveObject(obj, d3DomElement); + } + else { + renderCompoundObject(getRefID(obj), d3DomElement, false); + } + } + + + function renderPrimitiveObject(obj, d3DomElement) { + var typ = typeof obj; + + if (obj == null) { + d3DomElement.append('None'); + } + else if (typ == "number") { + d3DomElement.append('' + obj + ''); + } + else if (typ == "boolean") { + if (obj) { + d3DomElement.append('True'); + } + else { + d3DomElement.append('False'); + } + } + else if (typ == "string") { + // escape using htmlspecialchars to prevent HTML/script injection + var literalStr = htmlspecialchars(obj); + + // print as a double-quoted string literal + literalStr = literalStr.replace(new RegExp('\"', 'g'), '\\"'); // replace ALL + literalStr = '"' + literalStr + '"'; + + d3DomElement.append('' + literalStr + ''); + } + else { + assert(false); + } + } + + + function renderCompoundObject(objID, d3DomElement, isTopLevel) { + if (!isTopLevel && renderedObjectIDs.has(objID)) { + var srcDivID = myViz.generateID('heap_pointer_src_' + heap_pointer_src_id); + heap_pointer_src_id++; // just make sure each source has a UNIQUE ID + + var dstDivID = myViz.generateID('heap_object_' + objID); + + if (myViz.textualMemoryLabels) { + var labelID = srcDivID + '_text_label'; + d3DomElement.append('
    id' + objID + '
    '); + + myViz.domRoot.find('div#' + labelID).hover( + function() { + myViz.jsPlumbInstance.connect({source: labelID, target: dstDivID, + scope: 'varValuePointer'}); + }, + function() { + myViz.jsPlumbInstance.select({source: labelID}).detach(); + }); + } + else { + // render jsPlumb arrow source since this heap object has already been rendered + // (or will be rendered soon) + + // add a stub so that we can connect it with a connector later. + // IE needs this div to be NON-EMPTY in order to properly + // render jsPlumb endpoints, so that's why we add an " "! + d3DomElement.append('
     
    '); + + assert(!connectionEndpointIDs.has(srcDivID)); + connectionEndpointIDs.set(srcDivID, dstDivID); + //console.log('HEAP->HEAP', srcDivID, dstDivID); + + assert(!heapConnectionEndpointIDs.has(srcDivID)); + heapConnectionEndpointIDs.set(srcDivID, dstDivID); + } + + return; // early return! + } + + + var heapObjID = myViz.generateID('heap_object_' + objID); + + + // wrap ALL compound objects in a heapObject div so that jsPlumb + // connectors can point to it: + d3DomElement.append('
    '); + d3DomElement = myViz.domRoot.find('#' + heapObjID); + + renderedObjectIDs.set(objID, 1); + + var obj = curEntry.heap[objID]; + assert($.isArray(obj)); + + // prepend the type label with a memory address label + var typeLabelPrefix = ''; + if (myViz.textualMemoryLabels) { + typeLabelPrefix = 'id' + objID + ':'; + } + + if (obj[0] == 'LIST' || obj[0] == 'TUPLE' || obj[0] == 'SET' || obj[0] == 'DICT') { + var label = obj[0].toLowerCase(); + + assert(obj.length >= 1); + if (obj.length == 1) { + d3DomElement.append('
    ' + typeLabelPrefix + 'empty ' + label + '
    '); + } + else { + d3DomElement.append('
    ' + typeLabelPrefix + label + '
    '); + d3DomElement.append('
    '); + var tbl = d3DomElement.children('table'); + + if (obj[0] == 'LIST' || obj[0] == 'TUPLE') { + tbl.append('
    '); + + var tbl = d3DomElement.children('table'); + + $.each(obj, function(ind, kvPair) { + if (ind < headerLength) return; // skip header tags + + tbl.append(''); + + var newRow = tbl.find('tr:last'); + var keyTd = newRow.find('td:first'); + var valTd = newRow.find('td:last'); + + // the keys should always be strings, so render them directly (and without quotes): + // (actually this isn't the case when strings are rendered on the heap) + if (typeof kvPair[0] == "string") { + // common case ... + var attrnameStr = htmlspecialchars(kvPair[0]); + keyTd.append('' + attrnameStr + ''); + } + else { + // when strings are rendered as heap objects ... + renderNestedObject(kvPair[0], keyTd); + } + + // values can be arbitrary objects, so recurse: + renderNestedObject(kvPair[1], valTd); + }); + } + } + else if (obj[0] == 'INSTANCE_PPRINT') { + d3DomElement.append('
    ' + typeLabelPrefix + obj[1] + ' instance
    '); + + strRepr = htmlspecialchars(obj[2]); // escape strings! + d3DomElement.append('
    ' + strRepr + '
    '); + } + else if (obj[0] == 'FUNCTION') { + assert(obj.length == 3); + + // pretty-print lambdas and display other weird characters: + var funcName = htmlspecialchars(obj[1]).replace('<lambda>', '\u03bb'); + var parentFrameID = obj[2]; // optional + + d3DomElement.append('
    ' + typeLabelPrefix + 'function
    '); + + if (parentFrameID) { + d3DomElement.append('
    ' + funcName + ' [parent=f'+ parentFrameID + ']
    '); + } + else { + d3DomElement.append('
    ' + funcName + '
    '); + } + } + else if (obj[0] == 'HEAP_PRIMITIVE') { + assert(obj.length == 3); + + var typeName = obj[1]; + var primitiveVal = obj[2]; + + // add a bit of padding to heap primitives, for aesthetics + d3DomElement.append('
    '); + d3DomElement.find('div.heapPrimitive').append('
    ' + typeLabelPrefix + typeName + '
    '); + renderPrimitiveObject(primitiveVal, d3DomElement.find('div.heapPrimitive')); + } + else { + // render custom data type + assert(obj.length == 2); + + var typeName = obj[0]; + var strRepr = obj[1]; + + strRepr = htmlspecialchars(strRepr); // escape strings! + + d3DomElement.append('
    ' + typeLabelPrefix + typeName + '
    '); + d3DomElement.append('
    ' + strRepr + '
    '); + } + } + + + // Render globals and then stack frames using d3: + + + // TODO: this sometimes seems buggy on Safari, so nix it for now: + function highlightAliasedConnectors(d, i) { + // if this row contains a stack pointer, then highlight its arrow and + // ALL aliases that also point to the same heap object + var stackPtrId = $(this).find('div.stack_pointer').attr('id'); + if (stackPtrId) { + var foundTargetId = null; + myViz.jsPlumbInstance.select({source: stackPtrId}).each(function(c) {foundTargetId = c.targetId;}); + + // use foundTargetId to highlight ALL ALIASES + myViz.jsPlumbInstance.select().each(function(c) { + if (c.targetId == foundTargetId) { + c.setHover(true); + $(c.canvas).css("z-index", 2000); // ... and move it to the VERY FRONT + } + else { + c.setHover(false); + } + }); + } + } + + function unhighlightAllConnectors(d, i) { + myViz.jsPlumbInstance.select().each(function(c) { + c.setHover(false); + }); + } + + + + // TODO: coalesce code for rendering globals and stack frames, + // since there's so much copy-and-paste grossness right now + + // render all global variables IN THE ORDER they were created by the program, + // in order to ensure continuity: + + // Derive a list where each element contains varname + // as long as value is NOT undefined. + // (Sometimes entries in curEntry.ordered_globals are undefined, + // so filter those out.) + var realGlobalsLst = []; + $.each(curEntry.ordered_globals, function(i, varname) { + var val = curEntry.globals[varname]; + + // (use '!==' to do an EXACT match against undefined) + if (val !== undefined) { // might not be defined at this line, which is OKAY! + realGlobalsLst.push(varname); + } + }); + + var globalsID = myViz.generateID('globals'); + var globalTblID = myViz.generateID('global_table'); + + var globalVarTable = myViz.domRootD3.select('#' + globalTblID) + .selectAll('tr') + .data(realGlobalsLst, + function(d) {return d;} // use variable name as key + ); + + globalVarTable + .enter() + .append('tr') + .attr('class', 'variableTr') + .attr('id', function(d, i) { + return myViz.generateID(varnameToCssID('global__' + d + '_tr')); // make globally unique (within the page) + }); + + + var globalVarTableCells = globalVarTable + .selectAll('td.stackFrameVar,td.stackFrameValue') + .data(function(d, i){return [d, d];}) /* map varname down both columns */ + + globalVarTableCells.enter() + .append('td') + .attr('class', function(d, i) {return (i == 0) ? 'stackFrameVar' : 'stackFrameValue';}); + + // remember that the enter selection is added to the update + // selection so that we can process it later ... + + // UPDATE + globalVarTableCells + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .each(function(varname, i) { + if (i == 0) { + $(this).html(varname); + } + else { + // always delete and re-render the global var ... + // NB: trying to cache and compare the old value using, + // say -- $(this).attr('data-curvalue', valStringRepr) -- leads to + // a mysterious and killer memory leak that I can't figure out yet + $(this).empty(); + + // make sure varname doesn't contain any weird + // characters that are illegal for CSS ID's ... + var varDivID = myViz.generateID('global__' + varnameToCssID(varname)); + + // need to get rid of the old connector in preparation for rendering a new one: + existingConnectionEndpointIDs.remove(varDivID); + + var val = curEntry.globals[varname]; + if (isPrimitiveType(val)) { + renderPrimitiveObject(val, $(this)); + } + else { + var heapObjID = myViz.generateID('heap_object_' + getRefID(val)); + + if (myViz.textualMemoryLabels) { + var labelID = varDivID + '_text_label'; + $(this).append('
    id' + getRefID(val) + '
    '); + $(this).find('div#' + labelID).hover( + function() { + myViz.jsPlumbInstance.connect({source: labelID, target: heapObjID, + scope: 'varValuePointer'}); + }, + function() { + myViz.jsPlumbInstance.select({source: labelID}).detach(); + }); + } + else { + // add a stub so that we can connect it with a connector later. + // IE needs this div to be NON-EMPTY in order to properly + // render jsPlumb endpoints, so that's why we add an " "! + $(this).append('
     
    '); + + assert(!connectionEndpointIDs.has(varDivID)); + connectionEndpointIDs.set(varDivID, heapObjID); + //console.log('STACK->HEAP', varDivID, heapObjID); + } + } + } + }); + + + + globalVarTableCells.exit() + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + globalVarTable.exit() + .each(function(d, i) { + // detach all stack_pointer connectors for divs that are being removed + $(this).find('.stack_pointer').each(function(i, sp) { + existingConnectionEndpointIDs.remove($(sp).attr('id')); + }); + + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + + // for aesthetics, hide globals if there aren't any globals to display + if (curEntry.ordered_globals.length == 0) { + this.domRoot.find('#' + globalsID).hide(); + } + else { + this.domRoot.find('#' + globalsID).show(); + } + + + // holy cow, the d3 code for stack rendering is ABSOLUTELY NUTS! + + var stackDiv = myViz.domRootD3.select('#stack'); + + // VERY IMPORTANT for selectAll selector to be SUPER specific here! + var stackFrameDiv = stackDiv.selectAll('div.stackFrame,div.zombieStackFrame') + .data(curEntry.stack_to_render, function(frame) { + // VERY VERY VERY IMPORTANT for properly handling closures and nested functions + // (see the backend code for more details) + return frame.unique_hash; + }); + + var sfdEnter = stackFrameDiv.enter() + .append('div') + .attr('class', function(d, i) {return d.is_zombie ? 'zombieStackFrame' : 'stackFrame';}) + .attr('id', function(d, i) {return d.is_zombie ? myViz.generateID("zombie_stack" + i) + : myViz.generateID("stack" + i); + }) + // HTML5 custom data attributes + .attr('data-frame_id', function(frame, i) {return frame.frame_id;}) + .attr('data-parent_frame_id', function(frame, i) { + return (frame.parent_frame_id_list.length > 0) ? frame.parent_frame_id_list[0] : null; + }) + .each(function(frame, i) { + if (!myViz.drawParentPointers) { + return; + } + // only run if myViz.drawParentPointers is true ... + + var my_CSS_id = $(this).attr('id'); + + //console.log(my_CSS_id, 'ENTER'); + + // render a parent pointer whose SOURCE node is this frame + // i.e., connect this frame to p, where this.parent_frame_id == p.frame_id + // (if this.parent_frame_id is null, then p is the global frame) + if (frame.parent_frame_id_list.length > 0) { + var parent_frame_id = frame.parent_frame_id_list[0]; + // tricky turkey! + // ok this hack just HAPPENS to work by luck ... usually there will only be ONE frame + // that matches this selector, but sometimes multiple frames match, in which case the + // FINAL frame wins out (since parentPointerConnectionEndpointIDs is a map where each + // key can be mapped to only ONE value). it so happens that the final frame winning + // out looks "desirable" for some of the closure test cases that I've tried. but + // this code is quite brittle :( + myViz.domRoot.find('div#stack [data-frame_id=' + parent_frame_id + ']').each(function(i, e) { + var parent_CSS_id = $(this).attr('id'); + //console.log('connect', my_CSS_id, parent_CSS_id); + parentPointerConnectionEndpointIDs.set(my_CSS_id, parent_CSS_id); + }); + } + else { + // render a parent pointer to the global frame + //console.log('connect', my_CSS_id, globalsID); + // only do this if there are actually some global variables to display ... + if (curEntry.ordered_globals.length > 0) { + parentPointerConnectionEndpointIDs.set(my_CSS_id, globalsID); + } + } + + // tricky turkey: render parent pointers whose TARGET node is this frame. + // i.e., for all frames f such that f.parent_frame_id == my_frame_id, + // connect f to this frame. + // (make sure not to confuse frame IDs with CSS IDs!!!) + var my_frame_id = frame.frame_id; + myViz.domRoot.find('div#stack [data-parent_frame_id=' + my_frame_id + ']').each(function(i, e) { + var child_CSS_id = $(this).attr('id'); + //console.log('connect', child_CSS_id, my_CSS_id); + parentPointerConnectionEndpointIDs.set(child_CSS_id, my_CSS_id); + }); + }); + + sfdEnter + .append('div') + .attr('class', 'stackFrameHeader') + .html(function(frame, i) { + + // pretty-print lambdas and display other weird characters + // (might contain '<' or '>' for weird names like ) + var funcName = htmlspecialchars(frame.func_name).replace('<lambda>', '\u03bb') + .replace('\n', '
    '); + + var headerLabel = funcName; + + // only display if you're someone's parent + if (frame.is_parent) { + headerLabel = 'f' + frame.frame_id + ': ' + headerLabel; + } + + // optional (btw, this isn't a CSS id) + if (frame.parent_frame_id_list.length > 0) { + var parentFrameID = frame.parent_frame_id_list[0]; + headerLabel = headerLabel + ' [parent=f' + parentFrameID + ']'; + } + + return headerLabel; + }); + + sfdEnter + .append('table') + .attr('class', 'stackFrameVarTable'); + + + var stackVarTable = stackFrameDiv + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .select('table').selectAll('tr') + .data(function(frame) { + // each list element contains a reference to the entire frame + // object as well as the variable name + // TODO: look into whether we can use d3 parent nodes to avoid + // this hack ... http://bost.ocks.org/mike/nest/ + return frame.ordered_varnames.map(function(varname) {return {varname:varname, frame:frame};}); + }, + function(d) {return d.varname;} // use variable name as key + ); + + stackVarTable + .enter() + .append('tr') + .attr('class', 'variableTr') + .attr('id', function(d, i) { + return myViz.generateID(varnameToCssID(d.frame.unique_hash + '__' + d.varname + '_tr')); // make globally unique (within the page) + }); + + + var stackVarTableCells = stackVarTable + .selectAll('td.stackFrameVar,td.stackFrameValue') + .data(function(d, i) {return [d, d] /* map identical data down both columns */;}); + + stackVarTableCells.enter() + .append('td') + .attr('class', function(d, i) {return (i == 0) ? 'stackFrameVar' : 'stackFrameValue';}); + + stackVarTableCells + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .each(function(d, i) { + var varname = d.varname; + var frame = d.frame; + + if (i == 0) { + if (varname == '__return__') + $(this).html('Return
    value
    '); + else + $(this).html(varname); + } + else { + // always delete and re-render the stack var ... + // NB: trying to cache and compare the old value using, + // say -- $(this).attr('data-curvalue', valStringRepr) -- leads to + // a mysterious and killer memory leak that I can't figure out yet + $(this).empty(); + + // make sure varname and frame.unique_hash don't contain any weird + // characters that are illegal for CSS ID's ... + var varDivID = myViz.generateID(varnameToCssID(frame.unique_hash + '__' + varname)); + + // need to get rid of the old connector in preparation for rendering a new one: + existingConnectionEndpointIDs.remove(varDivID); + + var val = frame.encoded_locals[varname]; + if (isPrimitiveType(val)) { + renderPrimitiveObject(val, $(this)); + } + else { + var heapObjID = myViz.generateID('heap_object_' + getRefID(val)); + if (myViz.textualMemoryLabels) { + var labelID = varDivID + '_text_label'; + $(this).append('
    id' + getRefID(val) + '
    '); + $(this).find('div#' + labelID).hover( + function() { + myViz.jsPlumbInstance.connect({source: labelID, target: heapObjID, + scope: 'varValuePointer'}); + }, + function() { + myViz.jsPlumbInstance.select({source: labelID}).detach(); + }); + } + else { + // add a stub so that we can connect it with a connector later. + // IE needs this div to be NON-EMPTY in order to properly + // render jsPlumb endpoints, so that's why we add an " "! + $(this).append('
     
    '); + + assert(!connectionEndpointIDs.has(varDivID)); + connectionEndpointIDs.set(varDivID, heapObjID); + //console.log('STACK->HEAP', varDivID, heapObjID); + } + } + } + }); + + + stackVarTableCells.exit() + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + stackVarTable.exit() + .each(function(d, i) { + $(this).find('.stack_pointer').each(function(i, sp) { + // detach all stack_pointer connectors for divs that are being removed + existingConnectionEndpointIDs.remove($(sp).attr('id')); + }); + + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + stackFrameDiv.exit() + .each(function(frame, i) { + $(this).find('.stack_pointer').each(function(i, sp) { + // detach all stack_pointer connectors for divs that are being removed + existingConnectionEndpointIDs.remove($(sp).attr('id')); + }); + + var my_CSS_id = $(this).attr('id'); + + //console.log(my_CSS_id, 'EXIT'); + + // Remove all pointers where either the source or destination end is my_CSS_id + existingParentPointerConnectionEndpointIDs.forEach(function(k, v) { + if (k == my_CSS_id || v == my_CSS_id) { + //console.log('remove EPP', k, v); + existingParentPointerConnectionEndpointIDs.remove(k); + } + }); + + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + + // NB: ugh, I'm not very happy about this hack, but it seems necessary + // for embedding within sophisticated webpages such as IPython Notebook + + // delete all connectors. do this AS LATE AS POSSIBLE so that + // (presumably) the calls to $(this).empty() earlier in this function + // will properly garbage collect the connectors + // + // WARNING: for environment parent pointers, garbage collection doesn't seem to + // be working as intended :( + // + // I suspect that this is due to the fact that parent pointers are SIBLINGS + // of stackFrame divs and not children, so when stackFrame divs get destroyed, + // their associated parent pointers do NOT.) + myViz.jsPlumbInstance.reset(); + + + // use jsPlumb scopes to keep the different kinds of pointers separated + function renderVarValueConnector(varID, valueID) { + myViz.jsPlumbInstance.connect({source: varID, target: valueID, scope: 'varValuePointer'}); + } + + + var totalParentPointersRendered = 0; + + function renderParentPointerConnector(srcID, dstID) { + // SUPER-DUPER-ugly hack since I can't figure out a cleaner solution for now: + // if either srcID or dstID no longer exists, then SKIP rendering ... + if ((myViz.domRoot.find('#' + srcID).length == 0) || + (myViz.domRoot.find('#' + dstID).length == 0)) { + return; + } + + //console.log('renderParentPointerConnector:', srcID, dstID); + + myViz.jsPlumbInstance.connect({source: srcID, target: dstID, + anchors: ["LeftMiddle", "LeftMiddle"], + + // 'horizontally offset' the parent pointers up so that they don't look as ugly ... + //connector: ["Flowchart", { stub: 9 + (6 * (totalParentPointersRendered + 1)) }], + + // actually let's try a bezier curve ... + connector: [ "Bezier", { curviness: 45 }], + + endpoint: ["Dot", {radius: 4}], + //hoverPaintStyle: {lineWidth: 1, strokeStyle: connectorInactiveColor}, // no hover colors + scope: 'frameParentPointer'}); + totalParentPointersRendered++; + } + + if (!myViz.textualMemoryLabels) { + // re-render existing connectors and then ... + existingConnectionEndpointIDs.forEach(renderVarValueConnector); + // add all the NEW connectors that have arisen in this call to renderDataStructures + connectionEndpointIDs.forEach(renderVarValueConnector); + } + // do the same for environment parent pointers + if (myViz.drawParentPointers) { + existingParentPointerConnectionEndpointIDs.forEach(renderParentPointerConnector); + parentPointerConnectionEndpointIDs.forEach(renderParentPointerConnector); + } + + /* + myViz.jsPlumbInstance.select().each(function(c) { + console.log('CONN:', c.sourceId, c.targetId); + }); + */ + //console.log('---', myViz.jsPlumbInstance.select().length, '---'); + + + function highlight_frame(frameID) { + myViz.jsPlumbInstance.select().each(function(c) { + // this is VERY VERY fragile code, since it assumes that going up + // FOUR layers of parent() calls will get you from the source end + // of the connector to the enclosing stack frame + var stackFrameDiv = c.source.parent().parent().parent().parent(); + + // if this connector starts in the selected stack frame ... + if (stackFrameDiv.attr('id') == frameID) { + // then HIGHLIGHT IT! + c.setPaintStyle({lineWidth:1, strokeStyle: connectorBaseColor}); + c.endpoints[0].setPaintStyle({fillStyle: connectorBaseColor}); + //c.endpoints[1].setVisible(false, true, true); // JUST set right endpoint to be invisible + + $(c.canvas).css("z-index", 1000); // ... and move it to the VERY FRONT + } + // for heap->heap connectors + else if (heapConnectionEndpointIDs.has(c.endpoints[0].elementId)) { + // NOP since it's already the color and style we set by default + } + else { + // else unhighlight it + c.setPaintStyle({lineWidth:1, strokeStyle: connectorInactiveColor}); + c.endpoints[0].setPaintStyle({fillStyle: connectorInactiveColor}); + //c.endpoints[1].setVisible(false, true, true); // JUST set right endpoint to be invisible + + $(c.canvas).css("z-index", 0); + } + }); + + + // clear everything, then just activate this one ... + myViz.domRoot.find(".stackFrame").removeClass("highlightedStackFrame"); + myViz.domRoot.find('#' + frameID).addClass("highlightedStackFrame"); + } + + + // highlight the top-most non-zombie stack frame or, if not available, globals + var frame_already_highlighted = false; + $.each(curEntry.stack_to_render, function(i, e) { + if (e.is_highlighted) { + highlight_frame(myViz.generateID('stack' + i)); + frame_already_highlighted = true; + } + }); + + if (!frame_already_highlighted) { + highlight_frame(myViz.generateID('globals')); + } + +} + + + +ExecutionVisualizer.prototype.redrawConnectors = function() { + this.jsPlumbInstance.repaintEverything(); +} + + +// Utilities + + +/* colors - see pytutor.css for more colors */ + +var highlightedLineColor = '#e4faeb'; +var highlightedLineBorderColor = '#005583'; + +var highlightedLineLighterColor = '#e8fff0'; + +var funcCallLineColor = '#a2eebd'; + +var brightRed = '#e93f34'; + +var connectorBaseColor = '#005583'; +var connectorHighlightColor = brightRed; +var connectorInactiveColor = '#cccccc'; + +var errorColor = brightRed; + +var breakpointColor = brightRed; +var hoverBreakpointColor = connectorBaseColor; + + +// Unicode arrow types: '\u21d2', '\u21f0', '\u2907' +var darkArrowColor = brightRed; +var lightArrowColor = '#c9e6ca'; + + +function assert(cond) { + if (!cond) { + alert("Assertion Failure (see console log for backtrace)"); + throw 'Assertion Failure'; + } +} + +// taken from http://www.toao.net/32-my-htmlspecialchars-function-for-javascript +function htmlspecialchars(str) { + if (typeof(str) == "string") { + str = str.replace(/&/g, "&"); /* must do & first */ + + // ignore these for now ... + //str = str.replace(/"/g, """); + //str = str.replace(/'/g, "'"); + + str = str.replace(//g, ">"); + + // replace spaces: + str = str.replace(/ /g, " "); + + // replace tab as four spaces: + str = str.replace(/\t/g, "    "); + } + return str; +} + + +// same as htmlspecialchars except don't worry about expanding spaces or +// tabs since we want proper word wrapping in divs. +function htmlsanitize(str) { + if (typeof(str) == "string") { + str = str.replace(/&/g, "&"); /* must do & first */ + + str = str.replace(//g, ">"); + } + return str; +} + + +String.prototype.rtrim = function() { + return this.replace(/\s*$/g, ""); +} + + +// make sure varname doesn't contain any weird +// characters that are illegal for CSS ID's ... +// +// I know for a fact that iterator tmp variables named '_[1]' +// are NOT legal names for CSS ID's. +// I also threw in '{', '}', '(', ')', '<', '>' as illegal characters. +// +// also some variable names are like '.0' (for generator expressions), +// and '.' seems to be illegal. +// TODO: what other characters are illegal??? +var lbRE = new RegExp('\\[|{|\\(|<', 'g'); +var rbRE = new RegExp('\\]|}|\\)|>', 'g'); +function varnameToCssID(varname) { + return varname.replace(lbRE, 'LeftB_').replace(rbRE, '_RightB').replace('.', '_DOT_'); +} + + +// compare two JSON-encoded compound objects for structural equivalence: +function structurallyEquivalent(obj1, obj2) { + // punt if either isn't a compound type + if (isPrimitiveType(obj1) || isPrimitiveType(obj2)) { + return false; + } + + // must be the same compound type + if (obj1[0] != obj2[0]) { + return false; + } + + // must have the same number of elements or fields + if (obj1.length != obj2.length) { + return false; + } + + // for a list or tuple, same size (e.g., a cons cell is a list/tuple of size 2) + if (obj1[0] == 'LIST' || obj1[0] == 'TUPLE') { + return true; + } + else { + var startingInd = -1; + + if (obj1[0] == 'DICT') { + startingInd = 2; + } + else if (obj1[0] == 'INSTANCE') { + startingInd = 3; + } + else { + return false; // punt on all other types + } + + var obj1fields = d3.map(); + + // for a dict or object instance, same names of fields (ordering doesn't matter) + for (var i = startingInd; i < obj1.length; i++) { + obj1fields.set(obj1[i][0], 1); // use as a set + } + + for (var i = startingInd; i < obj2.length; i++) { + if (!obj1fields.has(obj2[i][0])) { + return false; + } + } + + return true; + } +} + + +function isPrimitiveType(obj) { + var typ = typeof obj; + return ((obj == null) || (typ != "object")); +} + +function getRefID(obj) { + assert(obj[0] == 'REF'); + return obj[1]; +} + + +// Annotation bubbles + +var qtipShared = { + show: { + ready: true, // show on document.ready instead of on mouseenter + delay: 0, + event: null, + effect: function() {$(this).show();}, // don't do any fancy fading because it screws up with scrolling + }, + hide: { + fixed: true, + event: null, + effect: function() {$(this).hide();}, // don't do any fancy fading because it screws up with scrolling + }, + style: { + classes: 'ui-tooltip-pgbootstrap', // my own customized version of the bootstrap style + }, +}; + + +// a speech bubble annotation to attach to: +// 'codeline' - a line of code +// 'frame' - a stack frame +// 'variable' - a variable within a stack frame +// 'object' - an object on the heap +// (as determined by the 'type' param) +// +// domID is the ID of the element to attach to (without the leading '#' sign) +function AnnotationBubble(parentViz, type, domID) { + this.parentViz = parentViz; + + this.domID = domID; + this.hashID = '#' + domID; + + this.type = type; + + if (type == 'codeline') { + this.my = 'left center'; + this.at = 'right center'; + } + else if (type == 'frame') { + this.my = 'right center'; + this.at = 'left center'; + } + else if (type == 'variable') { + this.my = 'right center'; + this.at = 'left center'; + } + else if (type == 'object') { + this.my = 'bottom left'; + this.at = 'top center'; + } + else { + assert(false); + } + + // possible states: + // 'invisible' + // 'edit' + // 'view' + // 'minimized' + // 'stub' + this.state = 'invisible'; + + this.text = ''; // the actual contents of the annotation bubble + + this.qtipHidden = false; // is there a qtip object present but hidden? (TODO: kinda confusing) +} + +AnnotationBubble.prototype.showStub = function() { + assert(this.state == 'invisible' || this.state == 'edit'); + assert(this.text == ''); + + var myBubble = this; // to avoid name clashes with 'this' in inner scopes + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: ' ', + id: this.domID, + position: { + my: this.my, + at: this.at, + adjust: { + x: (myBubble.type == 'codeline' ? -6 : 0), // shift codeline tips over a bit for aesthetics + }, + effect: null, // disable all cutesy animations + }, + style: { + classes: 'ui-tooltip-pgbootstrap ui-tooltip-pgbootstrap-stub' + } + })); + + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + myBubble.showEditor(); + }); + + this.state = 'stub'; +} + +AnnotationBubble.prototype.showEditor = function() { + assert(this.state == 'stub' || this.state == 'view' || this.state == 'minimized'); + + var myBubble = this; // to avoid name clashes with 'this' in inner scopes + + var ta = ''; + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: ta, + id: this.domID, + position: { + my: this.my, + at: this.at, + adjust: { + x: (myBubble.type == 'codeline' ? -6 : 0), // shift codeline tips over a bit for aesthetics + }, + effect: null, // disable all cutesy animations + } + })); + + + $(this.qTipContentID()).find('textarea.bubbleInputText') + // set handler when the textarea loses focus + .blur(function() { + myBubble.text = $(this).val().trim(); // strip all leading and trailing spaces + + if (myBubble.text) { + myBubble.showViewer(); + } + else { + myBubble.showStub(); + } + }) + .focus(); // grab focus so that the user can start typing right away! + + this.state = 'edit'; +} + + +AnnotationBubble.prototype.bindViewerClickHandler = function() { + var myBubble = this; + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + if (myBubble.parentViz.editAnnotationMode) { + myBubble.showEditor(); + } + else { + myBubble.minimizeViewer(); + } + }); +} + +AnnotationBubble.prototype.showViewer = function() { + assert(this.state == 'edit' || this.state == 'invisible'); + assert(this.text); // must be non-empty! + + var myBubble = this; + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: htmlsanitize(this.text), // help prevent HTML/JS injection attacks + id: this.domID, + position: { + my: this.my, + at: this.at, + adjust: { + x: (myBubble.type == 'codeline' ? -6 : 0), // shift codeline tips over a bit for aesthetics + }, + effect: null, // disable all cutesy animations + } + })); + + this.bindViewerClickHandler(); + this.state = 'view'; +} + + +AnnotationBubble.prototype.minimizeViewer = function() { + assert(this.state == 'view'); + + var myBubble = this; + + $(this.hashID).qtip('option', 'content.text', ' '); //hack to "minimize" its size + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + if (myBubble.parentViz.editAnnotationMode) { + myBubble.showEditor(); + } + else { + myBubble.restoreViewer(); + } + }); + + this.state = 'minimized'; +} + +AnnotationBubble.prototype.restoreViewer = function() { + assert(this.state == 'minimized'); + $(this.hashID).qtip('option', 'content.text', htmlsanitize(this.text)); // help prevent HTML/JS injection attacks + this.bindViewerClickHandler(); + this.state = 'view'; +} + +// NB: actually DESTROYS the QTip object +AnnotationBubble.prototype.makeInvisible = function() { + assert(this.state == 'stub' || this.state == 'edit'); + this.destroyQTip(); + this.state = 'invisible'; +} + + +AnnotationBubble.prototype.destroyQTip = function() { + $(this.hashID).qtip('destroy'); +} + +AnnotationBubble.prototype.qTipContentID = function() { + return '#ui-tooltip-' + this.domID + '-content'; +} + +AnnotationBubble.prototype.qTipID = function() { + return '#ui-tooltip-' + this.domID; +} + + +AnnotationBubble.prototype.enterEditMode = function() { + assert(this.parentViz.editAnnotationMode); + if (this.state == 'invisible') { + this.showStub(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } +} + +AnnotationBubble.prototype.enterViewMode = function() { + assert(!this.parentViz.editAnnotationMode); + if (this.state == 'stub') { + this.makeInvisible(); + } + else if (this.state == 'edit') { + this.text = $(this.qTipContentID()).find('textarea.bubbleInputText').val().trim(); // strip all leading and trailing spaces + + if (this.text) { + this.showViewer(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } + else { + this.makeInvisible(); + } + } + else if (this.state == 'invisible') { + // this happens when, say, you first enter View Mode + if (this.text) { + this.showViewer(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } + } +} + +AnnotationBubble.prototype.preseedText = function(txt) { + assert(this.state == 'invisible'); + this.text = txt; +} + +AnnotationBubble.prototype.redrawCodelineBubble = function() { + assert(this.type == 'codeline'); + + if (isOutputLineVisibleForBubbles(this.domID)) { + if (this.qtipHidden) { + $(this.hashID).qtip('show'); + } + else { + $(this.hashID).qtip('reposition'); + } + + this.qtipHidden = false; + } + else { + $(this.hashID).qtip('hide'); + this.qtipHidden = true; + } +} + +AnnotationBubble.prototype.redrawBubble = function() { + $(this.hashID).qtip('reposition'); +} + + +// NB: copy-and-paste from isOutputLineVisible with some minor tweaks +function isOutputLineVisibleForBubbles(lineDivID) { + var pcod = $('#pyCodeOutputDiv'); + + var lineNoTd = $('#' + lineDivID); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + // add a few pixels of fudge factor on the bottom end due to bottom scrollbar + return (PO <= LO) && (LO < (PO + H - 25)); +} + + +// popup question dialog code from Brad Miller + +// inputId is the ID of the input element +// divId is the div that containsthe visualizer +// answer is a dotted form of an attribute that lives in the curEntry of the trace +// So if we want to ask for the value of a global variable we would say 'globals.a' +// this allows us do do curTrace[i].globals.a But we do it in the loop below using the +// [] operator. +function traceQCheckMe(inputId, divId, answer) { + var vis = $("#"+divId).data("vis") + var i = vis.curInstr + var curEntry = vis.curTrace[i+1]; + var ans = $('#'+inputId).val() + var attrs = answer.split(".") + var correctAns = curEntry; + for (j in attrs) { + correctAns = correctAns[attrs[j]] + } + feedbackElement = $("#" + divId + "_feedbacktext") + if (ans.length > 0 && ans == correctAns) { + feedbackElement.html('Correct') + } else { + feedbackElement.html(vis.curTrace[i].question.feedback) + } + +} + +function closeModal(divId) { + $.modal.close() + $("#"+divId).data("vis").stepForward(); +} diff --git a/book/common/ext/js-parsons/lib/jquery-ui.min.js b/book/common/ext/js-parsons/lib/jquery-ui.min.js new file mode 100644 index 0000000..59d4a5e --- /dev/null +++ b/book/common/ext/js-parsons/lib/jquery-ui.min.js @@ -0,0 +1,15 @@ +/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})}(jQuery),function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){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")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('
    ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=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.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.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";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();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 a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}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,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=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(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.lefth[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.toph[3]?j-this.offset.click.toph[2]?k-this.offset.click.left=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f=k&&g<=l||h>=k&&h<=l||gl)&&(e>=i&&e<=j||f>=i&&f<=j||ej);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();droppablesLoop:for(var g=0;g').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=!0,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=c.handles||(a(".ui-resizable-handle",this.element).length?{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"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),ea.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}}(jQuery),function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("
    ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy();return this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(!this.options.disabled){var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element});return!1}})}},_mouseDrag:function(b){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!!i&&i.element!=c.element[0]){var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.righth||i.bottome&&i.rightf&&i.bottom *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f){e=a(this);return!1}});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}this.currentItem=e,this._removeCurrentsFromItems();return!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),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: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,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b);return!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(b,c){if(!!b){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"=");return d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")});return d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+jf&&b+ka[this.floating?"width":"height"]?l:f0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a),this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}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").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];e||(b.style.visibility="hidden");return b},update:function(a,b){if(!e||!!d.forcePlaceholderSize)b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!!c)if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.topthis.containment[3]?h-this.offset.click.topthis.containment[2]?i-this.offset.click.left=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;if(b.parent().is(".ui-effects-wrapper")){c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus();return c}return b},setTransition:function(b,c,d,e){e=e||{},a.each(c,function(a,c){unit=b.cssUnit(c),unit[0]>0&&(e[c]=unit[0]*d+unit[1])});return e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];if(a.fx.off||!i)return h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)});return i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])});return d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b+c;return-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b+c;return d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b+c;return-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b*b+c;return d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){if(b==0)return c;if(b==e)return c+d;if((b/=e/2)<1)return d/2*Math.pow(2,10*(b-1))+c;return d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){if((b/=e/2)<1)return-d/2*(Math.sqrt(1-b*b)-1)+c;return d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}}(jQuery),function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}}(jQuery),function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}}(jQuery),function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}}(jQuery),function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show");times=(b.options.times||5)*2-1,duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=c.is(":visible"),animateTo=0,isVisible||(c.css("opacity",0).show(),animateTo=1),(d=="hide"&&isVisible||d=="show"&&!isVisible)&×--;for(var e=0;e').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}}(jQuery),function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(b.autoHeight||b.fillHeight)&&c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(!(this.options.disabled||b.altKey||b.ctrlKey)){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}if(f){a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus();return!1}return!0}},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];this._clickHandler({target:b},b);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(!d.disabled){if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return}},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!!g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}}),a.extend(a.ui.accordion,{version:"1.8.18",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size())b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);else{if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})}},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})}(jQuery),function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("
      ").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",context:{autocompleteRequest:++c},success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length").data("item.autocomplete",c).append(a("").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})}(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend(""),d.secondary&&b.append(""),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})}(jQuery),function($,undefined){function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);!c.length||c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);!$.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])&&!!d.length&&(d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover"))})}function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,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"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('
      '))}$.extend($.ui,{datepicker:{version:"1.8.18"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){extendRemove(this._defaults,a||{});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(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('
      ')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);c.hasClass(this.markerClassName)||(this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a))},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$(''+c+""),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('').addClass(this._triggerClass).html(g==""?f:$("").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){$.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]);return!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;db&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);c.hasClass(this.markerClassName)||(c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block"))},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$(''),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f);return this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(a){$.datepicker.log(a)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if(!$.datepicker._isDisabledDatepicker(a)&&$.datepicker._lastInput!=a){var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){e|=$(this).css("position")=="fixed";return!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0);return b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=$.data(a,PROP_NAME))&&this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=this,f=function(){$.datepicker._tidyDialog(b),e._curInst=null};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,f):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,f),c||f(),this._datepickerShowing=!1;var g=this._get(b,"onClose");g&&g.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!!$.datepicker._curInst){var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);this._isDisabledDatepicker(d[0])||(this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e))},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if(!$(d).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(e[0])){var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();b.setMonth(0),b.setDate(1);return Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1-1){j=1,k=l;for(;;){var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},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",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&pp)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?''+q+"":e?"":''+q+"",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?''+s+"":e?"":''+s+"",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'",x=d?'
      '+(c?w:"")+(this._isInRange(a,v)?'":"")+(c?"":w)+"
      ":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='
      '+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'
      '+"";var R=z?'":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="=5?' class="ui-datepicker-week-end"':"")+">"+''+C[T]+""}Q+=R+"";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z";var _=z?'":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Ym;_+='",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+""}n++,n>11&&(n=0,o++),Q+="
      '+this._get(a,"weekHeader")+"
      '+this._get(a,"calculateWeek")(Y)+""+(bb&&!G?" ":bc?''+Y.getDate()+"":''+Y.getDate()+"")+"
      "+(j?""+(g[0]>0&&N==g[1]-1?'
      ':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'':""),a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='
      ',m="";if(f||!i)m+=''+g[b]+"";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+=''+c+"";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="
      ";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&bd?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget" +))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.18",window["DP_jQuery_"+dpuuid]=$}(jQuery),function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||" ",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("
      ")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("
      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("
      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("
      ").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||" "))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.18",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()}(jQuery),function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("
      ").appendTo(this.element),this.oldValue=this._value(),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"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.18"})}(jQuery),function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("
      ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;ic&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.18"})}(jQuery),function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
      ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
    • #{label}
    • "},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_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(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(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"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)} +),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},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 b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():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(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.18"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+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(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
      a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
      "+""+"
      ",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
      t
      ",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
      ",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/book/common/ext/js-parsons/lib/jquery.sound.js b/book/common/ext/js-parsons/lib/jquery.sound.js new file mode 100644 index 0000000..33d9656 --- /dev/null +++ b/book/common/ext/js-parsons/lib/jquery.sound.js @@ -0,0 +1,91 @@ +/** + * jQuery sound plugin (no flash) + * + * port of script.aculo.us' sound.js (http://script.aculo.us), based on code by Jules Gravinese (http://www.webveteran.com/) + * + * Copyright (c) 2007 Jörn Zaefferer (http://bassistance.de) + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * $Id: jquery.sound.js 5854 2008-10-04 10:22:25Z joern.zaefferer $ + */ + +/** + * API Documentation + * + * // play a sound from the url + * $.sound.play(url) + * + * // play a sound from the url, on a track, stopping any sound already running on that track + * $.sound.play(url, { + * track: "track1" + * }); + * + * // increase the timeout to four seconds before removing the sound object from the dom for longer sounds + * $.sound.play(url, { + * timeout: 4000 + * }); + * + * // stop a sound by removing the element returned by play + * var sound = $.sound.play(url); + * sound.remove(); + * + * // disable playing sounds + * $.sound.enabled = false; + * + * // enable playing sounds + * $.sound.enabled = true + */ + +(function($) { + +$.sound = { + tracks: {}, + enabled: true, + template: function(src) { + // todo: move bgsound element and browser sniffing in here + // todo: test wmv on windows: Builder.node('embed', {type:'application/x-mplayer2', pluginspage:'http://microsoft.com/windows/mediaplayer/en/download/', id:'mediaPlayer', name:'mediaPlayer', displaysize:'4', autosize:'-1', bgcolor:'darkblue', showcontrols:'false', showtracker:'-1', showdisplay:'0', showstatusbar:'-1', videoborder3d:'-1', width:'0', height:'0', src:audioFile, autostart:'true', designtimesp:'5311', loop:'false'}); + // is_win = (agt.indexOf("windows") != -1); + return ''; + }, + play: function(url, options){ + if (!this.enabled) + return; + options = $.extend({ + url: url, + timeout: 2000 + }, options); + + if (options.track) { + if (this.tracks[options.track]) { + var current = this.tracks[options.track]; + // TODO check when Stop is avaiable, certainly not on a jQuery object + current[0].Stop && current[0].Stop(); + current.remove(); + } + } + + var element = $.browser.msie + ? $('').attr({ + src: options.url, + loop: 1, + autostart: true + }) + : $(this.template(options.url)); + + element.appendTo("body"); + + if (options.track) { + this.tracks[options.track] = element; + } + + setTimeout(function() { + element.remove(); + }, options.timeout) + + return element; + } +}; + +})(jQuery); \ No newline at end of file diff --git a/book/common/ext/js-parsons/lib/lis.js b/book/common/ext/js-parsons/lib/lis.js new file mode 100644 index 0000000..1ab4e30 --- /dev/null +++ b/book/common/ext/js-parsons/lib/lis.js @@ -0,0 +1,120 @@ +/* FEEDBACK: + - peräkkäiset rivit yhdistetään blokeiksi + - etsitään LIS jossa eniten peräkkäisiä rivejä + - värjätään LIS:n inverse punaiseksi, blokeista ehkä vain tausta + - sisennyspalaute kuten nykyisin alusta asti oikealla paikalla olevista riveistä (värjätäänkö vihreiksi?) +*/ + +// Takes an iterable sequence and returns the decks given by +// patience sorting as a list of lists +// http://wordaligned.org/articles/patience-sort +// http://en.wikipedia.org/wiki/Longest_increasing_subsequence + +var LIS = {}; + +(function($, _) { // wrap in anonymous function to allow overriding of _ and $ + + LIS.patience_sort = function(list) { + var arr = _.toArray(list), + decks = [[arr[0]]], + deckPos = 0; + for (var i = 1; i < arr.length; i++) { + var x = arr[i], + currDeck = decks[deckPos]; + if (x < _.last(currDeck)) { + // append to the last created deck + currDeck.push(x); + } else { + // create a new deck + decks.push([x]); + deckPos++; + } + } + return decks; + }; + + // Takes an iterable sequence of iterables that represent decks + // that are the result of patience sorting a sequence + LIS.find_lises = function(decks) { + decks = _.toArray(decks); + if (decks.length < 1) { + return decks; + } + var lises = [], + new_lises, + deck, + partial_lis, + partial_lis_extended, + x, i, j, k; + for (i = 0; i < decks.length; i++) { + new_lises = []; + deck = decks[i]; + for (j = 0; j < lises.length; j++) { + partial_lis = lises[j]; + for (k = 0; k < deck.length; k++) { + x = deck[k]; + if (x > _.last(partial_lis)) { + new_partial_lis = partial_lis.slice(0); // dummy copy + new_partial_lis.push(x); + new_lises.push(new_partial_lis); + } + } + new_lises.push(partial_lis); + } + for (k = 0; k < deck.length; k++) { + new_lises.push([deck[k]]); + } + lises = new_lises; + } + lis_length = _.max(_.map(lises, function(item) { return item.length; })); + lises = _.select(lises, function(item) { return item.length >= lis_length; }); + return lises; + }; + + LIS.best_lise = function(lises) { + var lis_scores = _.map(lises, function(item, index) { + if (item.length <= 1) { + return {score: 0, index: index}; + } + var score = 0; + for (var i = 1; i < item.length; i++) { + if (item[i-1] == item[i] - 1) { + score++; + } + } + return {score: score, index: index}; + }); + var best = _.max(lis_scores, function(item) { return item.score; }); + return lises[best.index]; + }; + + LIS.best_lise_inverse = function(list) { + var decks = this.patience_sort(_.toArray(list)), + lises = this.find_lises(decks), + best = this.best_lise(lises); + return _.difference(list, best); + }; + +// Takes an iterable sequence and returns a list of the inverses of +// all the longest increasing subsequences of this sequence +/* +function lis_inverses(list) { + var inverse_list = [], + decks = patience_sort(_.toArray(list)), + lises = find_lises(decks); + return _.map(lises, function(item) { return _.difference(list, item); }); +} + +function in_all_lis_inverses(list) { + var inverse_list = lis_inverses(list); + return _.intersection.apply(null, inverse_list); +} + +function inverse_indices(list) { + var in_all = in_all_lis_inverses(list); + return _.map(in_all, function(item) { return list.indexOf(item); }); +};*/ + +//This allows the current version of _ and $ to be used, even if it is later reverted +//with noConflict +})($, _); diff --git a/book/common/ext/js-parsons/lib/prettify.COPYING b/book/common/ext/js-parsons/lib/prettify.COPYING new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/book/common/ext/js-parsons/lib/prettify.COPYING @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/book/common/ext/js-parsons/lib/prettify.css b/book/common/ext/js-parsons/lib/prettify.css new file mode 100755 index 0000000..0f1ed75 --- /dev/null +++ b/book/common/ext/js-parsons/lib/prettify.css @@ -0,0 +1 @@ +.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun{color:#660}.pln{color:#000}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec{color:#606}pre.prettyprint{padding:2px;border:1px solid #888}@media print{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.pln{color:#000}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}} \ No newline at end of file diff --git a/book/common/ext/js-parsons/lib/prettify.js b/book/common/ext/js-parsons/lib/prettify.js new file mode 100755 index 0000000..b8b2515 --- /dev/null +++ b/book/common/ext/js-parsons/lib/prettify.js @@ -0,0 +1,622 @@ +function H() { + var x = navigator && navigator.userAgent + && /\bMSIE 6\./.test(navigator.userAgent); + H = function() { + return x + }; + return x +} +( function() { + function x(b) { + b = b.split(/ /g); + var a = {}; + for ( var c = b.length; --c >= 0;) { + var d = b[c]; + if (d) + a[d] = null + } + return a + } + var y = "break continue do else for if return while ", U = y + + "auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile ", D = U + + "catch class delete false import new operator private protected public this throw true try ", I = D + + "alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ", J = D + + "boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ", V = J + + "as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ", K = D + + "debugger eval export function get null set undefined var with Infinity NaN ", L = "caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ", M = y + + "and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ", N = y + + "alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ", O = y + + "case done elif esac eval fi function in local set then until ", W = I + + V + K + L + M + N + O; + function X(b) { + return b >= "a" && b <= "z" || b >= "A" && b <= "Z" + } + function u(b, a, c, d) { + b.unshift(c, d || 0); + try { + a.splice.apply(a, b) + } finally { + b.splice(0, 2) + } + } + var Y = ( function() { + var b = [ "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", "&=", + "(", "*", "*=", "+=", ",", "-=", "->", "/", "/=", ":", "::", + ";", "<", "<<", "<<=", "<=", "=", "==", "===", ">", ">=", ">>", + ">>=", ">>>", ">>>=", "?", "@", "[", "^", "^=", "^^", "^^=", + "{", "|", "|=", "||", "||=", "~", "break", "case", "continue", + "delete", "do", "else", "finally", "instanceof", "return", + "throw", "try", "typeof" ], a = "(?:(?:(?:^|[^0-9.])\\.{1,3})|(?:(?:^|[^\\+])\\+)|(?:(?:^|[^\\-])-)"; + for ( var c = 0; c < b.length; ++c) { + var d = b[c]; + a += X(d.charAt(0)) ? "|\\b" + d : "|" + + d.replace(/([^=<>:&])/g, "\\$1") + } + a += "|^)\\s*$"; + return new RegExp(a) + })(), P = /&/g, Q = //g, Z = /\"/g; + function $(b) { + return b.replace(P, "&").replace(Q, "<").replace(R, ">") + .replace(Z, """) + } + function E(b) { + return b.replace(P, "&").replace(Q, "<").replace(R, ">") + } + var aa = /</g, ba = />/g, ca = /'/g, da = /"/g, ea = /&/g, fa = / /g; + function ga(b) { + var a = b.indexOf("&"); + if (a < 0) + return b; + for (--a; (a = b.indexOf("&#", a + 1)) >= 0;) { + var c = b.indexOf(";", a); + if (c >= 0) { + var d = b.substring(a + 3, c), g = 10; + if (d && d.charAt(0) === "x") { + d = d.substring(1); + g = 16 + } + var e = parseInt(d, g); + if (!isNaN(e)) + b = b.substring(0, a) + String.fromCharCode(e) + + b.substring(c + 1) + } + } + return b.replace(aa, "<").replace(ba, ">").replace(ca, "'").replace(da, + '"').replace(ea, "&").replace(fa, " ") + } + function S(b) { + return "XMP" === b.tagName + } + function z(b, a) { + switch (b.nodeType) { + case 1: + var c = b.tagName.toLowerCase(); + a.push("<", c); + for ( var d = 0; d < b.attributes.length; ++d) { + var g = b.attributes[d]; + if (!g.specified) + continue; + a.push(" "); + z(g, a) + } + a.push(">"); + for ( var e = b.firstChild; e; e = e.nextSibling) + z(e, a); + if (b.firstChild || !/^(?:br|link|img)$/.test(c)) + a.push(""); + break; + case 2: + a.push(b.name.toLowerCase(), '="', $(b.value), '"'); + break; + case 3: + case 4: + a.push(E(b.nodeValue)); + break + } + } + var F = null; + function ha(b) { + if (null === F) { + var a = document.createElement("PRE"); + a + .appendChild(document + .createTextNode('\n')); + F = !/= 0; i -= " ".length) + d.push(" ".substring(0, i)); + g = e + 1; + break; + case "\n": + a = 0; + break; + default: + ++a + } + } + if (!d) + return c; + d.push(c.substring(g)); + return d.join("") + } + } + var ja = /(?:[^<]+| + + + + + + + + + +
      + + + + + + + \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/jqchart/gChartBasic.html b/book/modules/luther/sphinx/animation/jqchart/gChartBasic.html new file mode 100644 index 0000000..fcd23df --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/gChartBasic.html @@ -0,0 +1,41 @@ + + + + +jQuery Google Chart + + + + + + +

      jQuery Google Chart Basics

      +

      This page demonstrates the very basics of the + jQuery Google Chart plugin. + It contains the minimum requirements for using the plugin and + can be used as the basis for your own experimentation.

      +

      For more detail see the documentation reference page.

      +
      + + diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.js new file mode 100644 index 0000000..f95c0fb --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.js @@ -0,0 +1,334 @@ +/* http://keith-wood.name/gChart.html + Google Chart interface extensions for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ + +(function($) { // Hide scope, no $ conflict + +$.extend($.gchart._defaults, { + // Maps ------------------- + mapLatLong: false, // True to use lat/long coords in mapArea + mapArea: null, // New maps: (number) pixel border all around or + // (number[4]) individual pixel borders or lat/long + // Original maps: the general area to show: + // world, africa, asia, europe, middle_east, south_america, usa + mapRegions: [], // List of country/state codes to plot + mapDefaultColor: 'bebebe', // The colour for non-plotted countries/states + mapColors: ['blue', 'red'], // The colour range for plotted countries/states + // QR Code ---------------- + qrECLevel: null, // Error correction level: low, medium, quarter, high + qrMargin: null // Margin (squares) around QR code, default is 4 + }); + +// New chart types: formula, map, mapOriginal, meter, qrCode, scatter, venn +$.extend($.gchart._chartTypes, {formula: 'tx', map: 'map', mapOriginal: 't', + meter: 'gom', qrCode: 'qr', scatter: 's', venn: 'v', + gom: 'gom', qr: 'qr', s: 's', t: 't', tx: 'tx', v: 'v'}); + +$.extend($.gchart._typeOptions, {map: 'map', qr: 'qr', t: 'map', tx: 'no'}); + +$.extend($.gchart._prototype.prototype, { + + /* Latitude and longitude coordinates for the continents. */ + mapAfrica: [-35, -20, 40, 55], + mapAsia: [-15, 40, 75, 180], + mapAustralia: [-45, 110, -10, 155], + mapEurope: [33, -25, 73, 50], + mapNorthAmerica: [5, -175, 75, -50], + mapSouthAmerica: [-55, -85, 15, -35], + + /* Prepare options for a scatter chart. + @param values (number[][2/3]) the coordinates of the points: [0] is the x-coord, + [1] is the y-coord, [2] (optional) is the percentage size + @param minMax (number[2/4]) any minimum and maximum values for the axes (optional) + @param labels (string[]) the labels for the groups (optional) + @param colours (string[]) the colours for the labels (optional) + @param options (object) additional settings (optional) + @return (object) the configured options object */ + scatter: function(values, minMax, labels, colours, options) { + if (!$.isArray(minMax)) { + options = minMax; + colours = null; + labels = null; + minMax = null; + } + else if (typeof minMax[0] != 'number') { + options = colours; + colours = labels; + labels = minMax; + minMax = null; + } + if (labels && !$.isArray(labels)) { + options = labels; + colours = null; + labels = null; + } + var series = [[], [], []]; + for (var i = 0; i < values.length; i++) { + series[0][i] = values[i][0]; + series[1][i] = values[i][1]; + series[2][i] = values[i][2] || 100; + } + minMax = minMax || []; + options = options || {}; + if (labels) { + options.extension = {chdl: labels.join('|')}; + } + if (colours) { + colours = $.map(colours, function(v, i) { + return $.gchart.color(v); + }); + $.extend(options.extension, {chco: colours.join('|')}); + } + return $.extend({}, options, + {type: 'scatter', encoding: (minMax.length >= 2 ? 'scaled' : 'text'), series: [ + (minMax.length >= 2 ? $.gchart.series(series[0], minMax[0], minMax[1]) : + $.gchart.series(series[0])), + (minMax.length >= 4 ? $.gchart.series(series[1], + (minMax[2] != null ? minMax[2] : minMax[0]), (minMax[3] != null ? minMax[3] : minMax[1])) : + $.gchart.series(series[1])), $.gchart.series(series[2])]}); + }, + + /* Prepare options for a Venn diagram. + @param size1 (number) the relative size of the first circle + @param size2 (number) the relative size of the second circle + @param size3 (number) the relative size of the third circle + @param overlap12 (number) the overlap between circles 1 and 2 + @param overlap13 (number) the overlap between circles 1 and 3 + @param overlap23 (number) the overlap between circles 2 and 3 + @param overlap123 (number) the overlap between all circles + @param options (object) additional settings (optional) + @return (object) the configured options object */ + venn: function(size1, size2, size3, overlap12, overlap13, overlap23, overlap123, options) { + return $.extend({}, options || {}, {type: 'venn', series: + [$.gchart.series([size1, size2, size3, overlap12, overlap13, overlap23, overlap123])]}); + }, + + /* Prepare options for a Google meter. + @param text (string or string[]) the text to show on the arrow (optional) + @param values (number or number[] or [] of these) the position(s) of the arrow(s) + @param maxValue (number) the maximum value for the meter (optional, default 100) + @param colours (string[]) the colours to use for the band (optional) + @param labels (string[]) labels appearing beneath the meter (optional) + @param styles (number[][4]) the styles of each series' arrows: + width, dash, space, arrow size (optional) + @param options (object) additional settings (optional) + @return (object) the configured options object */ + meter: function(text, values, maxValue, colours, labels, styles, options) { + if (typeof text != 'string' && !$.isArray(text)) { + options = styles; + styles = labels; + labels = colours; + colours = maxValue; + maxValue = values; + values = text; + text = ''; + } + if (typeof maxValue != 'number') { + options = styles; + styles = labels; + labels = colours; + colours = maxValue; + maxValue = null; + } + if (!$.isArray(colours)) { + options = styles; + styles = labels; + labels = colours; + colours = null; + } + if (!$.isArray(labels)) { + options = styles; + styles = labels; + labels = null; + } + if (!$.isArray(styles)) { + options = styles; + styles = null; + } + values = ($.isArray(values) ? values : [values]); + var multi = false; + for (var i = 0; i < values.length; i++) { + multi = multi || $.isArray(values[i]); + } + var ss = (multi ? [] : [$.gchart.series(values)]); + if (multi) { + for (var i = 0; i < values.length; i++) { + ss.push($.gchart.series($.isArray(values[i]) ? values[i] : [values[i]])); + } + } + values = ss; + if (colours) { + var cs = ''; + $.each(colours, function(i, v) { + cs += ',' + $.gchart.color(v); + }); + colours = cs.substr(1); + } + if (styles) { + var ls = ['', '']; + $.each(styles, function(i, v) { + v = ($.isArray(v) ? v : [v]); + ls[0] += '|' + $.gchart.color(v.slice(0, 3).join(',')); + ls[1] += '|' + (v[3] || 15); + }); + styles = ls[0].substr(1) + ls[1]; + } + var axis = (labels && labels.length ? $.gchart.axis('y', labels) : null); + return $.extend({}, options || {}, {type: 'meter', + maxValue: maxValue || 100, series: values, + dataLabels: ($.isArray(text) ? text : [text || ''])}, + (colours ? {extension: {chco: colours}} : {}), + (axis ? {axes: [axis]} : {}), + (styles ? {extension: {chls: styles}} : {})); + }, + + /* Prepare options for a map chart. + @param latLongArea (boolean) true to specify the area via latitude/longitude (optional) + @param mapArea (string) the region of the world to show (original map style) or + (number[4]) the pixel zoom or lat/long coordinates to show or + (number) all around pixel zoom (optional) + @param values (object) the countries/states to plot - + attributes are country/state codes and values + @param defaultColour (string) the colour for regions without values (optional) + @param colour (string or string[]) the starting colour or + gradient colours for rendering values (optional) + @param endColour (string) the ending colour for rendering values (optional) + @param options (object) additional settings (optional) + @return (object) the configured options object */ + map: function(latLongArea, mapArea, values, defaultColour, colour, endColour, options) { + if (typeof latLongArea != 'boolean') { + options = endColour; + endColour = colour; + colour = defaultColour; + defaultColour = values; + values = mapArea; + mapArea = latLongArea; + latLongArea = false; + } + if (typeof mapArea == 'object' && !$.isArray(mapArea)) { // Optional mapArea + options = endColour; + endColour = colour; + colour = defaultColour; + defaultColour = values; + values = mapArea; + mapArea = null; + } + if (typeof defaultColour == 'object') { + options = defaultColour; + endColour = null; + colour = null; + defaultColour = null; + } + else if (typeof colour == 'object' && !$.isArray(colour)) { + options = colour; + endColour = null; + colour = null; + } + else if (typeof endColour == 'object') { + options = endColour; + endColour = null; + } + var mapRegions = []; + var data = []; + var i = 0; + for (var name in values) { + mapRegions[i] = name.replace(/_/g, '-'); + data[i] = values[name]; + i++; + } + if (typeof mapArea == 'number') { + mapArea = [mapArea, mapArea, mapArea, mapArea]; + } + return $.extend({}, options || {}, + {type: (typeof mapArea == 'string' ? 'mapOriginal' : 'map'), + mapLatLong: latLongArea, mapArea: mapArea, mapRegions: mapRegions, + mapDefaultColor: defaultColour || $.gchart._defaults.mapDefaultColor, + mapColors: ($.isArray(colour) ? colour : [colour || $.gchart._defaults.mapColors[0], + endColour || $.gchart._defaults.mapColors[1]]), + series: [$.gchart.series('', data)]}); + }, + + /* Prepare options for generating a QR Code. + @param text (object) the QR code settings or + (string) the text to encode + @param encoding (string) the encoding scheme (optional) + @param ecLevel (string) the error correction level: l, m, q, h (optional) + @param margin (number) the margin around the code (optional) + @return (object) the configured options object */ + qrCode: function(text, encoding, ecLevel, margin) { + var options = {}; + if (typeof text == 'object') { + options = text; + } + else { // Individual fields + options = {dataLabels: [text], encoding: encoding, + qrECLevel: ecLevel, qrMargin: margin}; + } + options.type = 'qrCode'; + if (options.text) { + options.dataLabels = [options.text]; + options.text = null; + } + return options; + }, + + /* Generate standard options for map charts. + @param options (object) the chart settings + @param labels (string) the concatenated labels for the chart + @return (string) the standard map chart options */ + mapOptions: function(options, labels) { + var encoding = this['_' + options.encoding + 'Encoding'] || this['_textEncoding']; + var colours = ''; + for (var i = 0; i < options.mapColors.length; i++) { + colours += ',' + $.gchart.color(options.mapColors[i]); + } + return (typeof options.mapArea == 'string' ? '&chtm=' + options.mapArea : + (options.mapArea ? (options.mapLatLong ? ':fixed=' : ':auto=') + + ($.isArray(options.mapArea) ? options.mapArea.join(',') : + options.mapArea + ',' + options.mapArea + ',' + options.mapArea + ',' + options.mapArea) : '')) + + '&chd=' + encoding.apply($.gchart, [options]) + + (options.mapRegions && options.mapRegions.length ? + '&chld=' + options.mapRegions.join(typeof options.mapArea == 'string' ? '' : '|') : '') + + '&chco=' + $.gchart.color(options.mapDefaultColor) + colours; + }, + + /* Generate standard options for QR Code charts. + @param options (object) the chart settings + @param labels (string) the concatenated labels for the chart + @return (string) the standard QR Code chart options */ + qrOptions: function(options, labels) { + return $.gchart._include('&choe=', options.encoding) + + (options.qrECLevel || options.qrMargin ? + '&chld=' + (options.qrECLevel ? options.qrECLevel.charAt(0) : 'l') + + (options.qrMargin != null ? '|' + options.qrMargin : '') : '') + + (labels ? '&chl=' + labels.substr(1) : ''); + }, + + /* Generate standard options for charts that aren't really charts. + @param options (object) the chart settings + @param labels (string) the concatenated labels for the chart + @return (string) the standard non-chart options */ + noOptions: function(options, labels) { + return '&chl=' + labels.substr(1); + }, + + /* Generate the options for chart size, including restriction for maps. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart size options */ + addSize: function(type, options) { + var maxSize = (type == 'map' || type == 't' ? 600 : 1000); + options.width = Math.max(10, Math.min(options.width, maxSize)); + options.height = Math.max(10, Math.min(options.height, maxSize)); + if (options.width * options.height > 300000) { + options.height = Math.floor(300000 / options.width); + } + return 'chs=' + options.width + 'x' + options.height; + } +}); + +})(jQuery); diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.min.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.min.js new file mode 100644 index 0000000..d6327ab --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.min.js @@ -0,0 +1,8 @@ +/* http://keith-wood.name/gChart.html + Google Chart interface extensions for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +(function($){$.extend($.gchart._defaults,{mapLatLong:false,mapArea:null,mapRegions:[],mapDefaultColor:'bebebe',mapColors:['blue','red'],qrECLevel:null,qrMargin:null});$.extend($.gchart._chartTypes,{formula:'tx',map:'map',mapOriginal:'t',meter:'gom',qrCode:'qr',scatter:'s',venn:'v',gom:'gom',qr:'qr',s:'s',t:'t',tx:'tx',v:'v'});$.extend($.gchart._typeOptions,{map:'map',qr:'qr',t:'map',tx:'no'});$.extend($.gchart._prototype.prototype,{mapAfrica:[-35,-20,40,55],mapAsia:[-15,40,75,180],mapAustralia:[-45,110,-10,155],mapEurope:[33,-25,73,50],mapNorthAmerica:[5,-175,75,-50],mapSouthAmerica:[-55,-85,15,-35],scatter:function(a,b,c,d,e){if(!$.isArray(b)){e=b;d=null;c=null;b=null}else if(typeof b[0]!='number'){e=d;d=c;c=b;b=null}if(c&&!$.isArray(c)){e=c;d=null;c=null}var f=[[],[],[]];for(var i=0;i=2?'scaled':'text'),series:[(b.length>=2?$.gchart.series(f[0],b[0],b[1]):$.gchart.series(f[0])),(b.length>=4?$.gchart.series(f[1],(b[2]!=null?b[2]:b[0]),(b[3]!=null?b[3]:b[1])):$.gchart.series(f[1])),$.gchart.series(f[2])]})},venn:function(a,b,c,d,e,f,g,h){return $.extend({},h||{},{type:'venn',series:[$.gchart.series([a,b,c,d,e,f,g])]})},meter:function(a,b,c,d,e,f,g){if(typeof a!='string'&&!$.isArray(a)){g=f;f=e;e=d;d=c;c=b;b=a;a=''}if(typeof c!='number'){g=f;f=e;e=d;d=c;c=null}if(!$.isArray(d)){g=f;f=e;e=d;d=null}if(!$.isArray(e)){g=f;f=e;e=null}if(!$.isArray(f)){g=f;f=null}b=($.isArray(b)?b:[b]);var h=false;for(var i=0;i300000){b.height=Math.floor(300000/b.width)}return'chs='+b.width+'x'+b.height}})})(jQuery); \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.pack.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.pack.js new file mode 100644 index 0000000..25dea33 --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.ext.pack.js @@ -0,0 +1,8 @@ +/* http://keith-wood.name/gChart.html + Google Chart interface extensions for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?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}('(o($){$.w($.7.O,{X:Y,r:6,C:[],P:\'1o\',B:[\'1p\',\'1q\'],D:6,E:6});$.w($.7.1r,{1s:\'Q\',z:\'z\',19:\'t\',Z:\'11\',12:\'F\',13:\'s\',14:\'v\',11:\'11\',F:\'F\',s:\'s\',t:\'t\',Q:\'Q\',v:\'v\'});$.w($.7.1t,{z:\'z\',F:\'F\',t:\'z\',Q:\'1u\'});$.w($.7.1v.1w,{1x:[-1a,-20,1b,1c],1y:[-15,1b,1d,1z],1A:[-1B,1C,-10,1D],1E:[1F,-25,1G,1e],1H:[5,-1I,1d,-1e],1J:[-1c,-1K,15,-1a],13:o(a,b,c,d,e){8(!$.n(b)){e=b;d=6;c=6;b=6}R 8(p b[0]!=\'16\'){e=d;d=c;c=b;b=6}8(c&&!$.n(c)){e=c;d=6;c=6}9 f=[[],[],[]];G(9 i=0;i=2?\'1M\':\'U\'),q:[(b.A>=2?$.7.q(f[0],b[0],b[1]):$.7.q(f[0])),(b.A>=4?$.7.q(f[1],(b[2]!=6?b[2]:b[0]),(b[3]!=6?b[3]:b[1])):$.7.q(f[1])),$.7.q(f[2])]})},14:o(a,b,c,d,e,f,g,h){u $.w({},h||{},{J:\'14\',q:[$.7.q([a,b,c,d,e,f,g])]})},Z:o(a,b,c,d,e,f,g){8(p a!=\'V\'&&!$.n(a)){g=f;f=e;e=d;d=c;c=b;b=a;a=\'\'}8(p c!=\'16\'){g=f;f=e;e=d;d=c;c=6}8(!$.n(d)){g=f;f=e;e=d;d=6}8(!$.n(e)){g=f;f=e;e=6}8(!$.n(f)){g=f;f=6}b=($.n(b)?b:[b]);9 h=Y;G(9 i=0;i1n){b.N=M.2e(1n/b.L)}u\'2f=\'+b.L+\'x\'+b.N}})})(2g);',62,141,'||||||null|gchart|if|var||||||||||||||isArray|function|typeof|series|mapArea|||return||extend|||map|length|mapColors|mapRegions|qrECLevel|qrMargin|qr|for|join|color|type|object|width|Math|height|_defaults|mapDefaultColor|tx|else|extension|encoding|text|string|substr|mapLatLong|false|meter||gom|qrCode|scatter|venn||number|chco|dataLabels|mapOriginal|35|40|55|75|50|100|each|_|this|chld|chl|max|min|300000|bebebe|blue|red|_chartTypes|formula|_typeOptions|no|_prototype|prototype|mapAfrica|mapAsia|180|mapAustralia|45|110|155|mapEurope|33|73|mapNorthAmerica|175|mapSouthAmerica|85|chdl|scaled|push|slice|axis|maxValue|axes|chls|boolean|in|replace|mapOptions|Encoding|_textEncoding|chtm||fixed|auto|chd|apply||qrOptions|_include|choe|charAt|noOptions|addSize|600|1000|floor|chs|jQuery'.split('|'),0,{})) \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.js new file mode 100644 index 0000000..7019ee2 --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.js @@ -0,0 +1,112 @@ +/* http://keith-wood.name/gChart.html + Google Chart GraphViz extension for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ + +(function($) { // Hide scope, no $ conflict + +// New chart types: graphviz +$.extend($.gchart._chartTypes, {graphviz: 'gv', gv: 'gv'}); + +$.extend($.gchart._typeOptions, {gv: 'no'}); + +$.extend($.gchart._prototype.prototype, { + + /* Prepare options for a GraphViz chart. + @param engine (string, optional) the graphing engine to use: + dot (default), neato, twopi, circo, fdp + @param options (object, optional) other options for the chart + @param directed (boolean, optional) true for directed graph, false for normal + @param nodes (string) the DOT representation of the nodes to graph or + (object) the graph nodes and their settings + @param edges (object, optional) the graph edges keyed from, with array of to + @param attrs (object, optional) other settings for the graph + @return (object) the configured options object */ + graphviz: function(engine, options, directed, nodes, edges, attrs) { + if (arguments.length == 1) { + nodes = engine; + engine = 'dot'; + } + var hadEngine = typeof engine == 'string'; + if (!hadEngine) { + attrs = edges; + edges = nodes; + nodes = directed; + directed = options; + options = engine; + engine = 'dot'; + } + if ((options && typeof options != 'object') || arguments.length == 2 || + (arguments.length == 3 && hadEngine)) { + attrs = edges; + edges = nodes; + nodes = directed; + directed = options; + options = {}; + } + if (typeof directed != 'boolean' && arguments.length > 1) { + attrs = edges; + edges = nodes; + nodes = directed; + directed = false; + } + options = options || {}; + options.type = 'gv' + (engine != 'dot' ? ':' + engine : ''); + options.dataLabels = [typeof nodes == 'string' ? nodes : + this._genGraph(directed, nodes, edges, attrs)]; + return options; + }, + + /* Generate a graph definition. + @param directed (boolean, optional) true for directed graph, false for normal + @param nodes (object) the graph nodes and their settings + @param edges (object) the graph edges keyed from, with array of to + @param attrs (object, optional) other settings for the graph + @return (string) the graph definition */ + _genGraph: function(directed, nodes, edges, attrs) { + attrs = attrs || {}; + var gdef = (directed ? 'digraph' : 'graph') + '{'; + var sep = ''; + for (var n in attrs) { + gdef += sep + n; + var sep2 = '['; + for (var n2 in attrs[n]) { + gdef += sep2 + n2 + '=' + attrs[n][n2]; + sep2 = ',' + } + gdef += (sep2 != '[' ? ']' : ''); + sep = ';'; + } + for (var node in nodes || {}) { + gdef += sep + node; + var sep2 = '['; + for (var n in nodes[node]) { + gdef += sep2 + n + '=' + nodes[node][n]; + sep2 = ',' + } + gdef += (sep2 != '[' ? ']' : ''); + sep = ';'; + } + for (var edge in edges || {}) { + for (var n in edges[edge]) { + gdef += sep + edge + (directed ? '->' : '--') + edges[edge][n]; + } + sep = ';'; + } + gdef += '}'; + return gdef; + }, + + /* Generate standard options for charts that aren't really charts. + @param options (object) the chart settings + @param labels (string) the concatenated labels for the chart + @return (string) the standard non-chart options */ + noOptions: function(options, labels) { + return '&chl=' + labels.substr(1); + } +}); + +})(jQuery); diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.min.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.min.js new file mode 100644 index 0000000..41c090d --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.min.js @@ -0,0 +1,8 @@ +/* http://keith-wood.name/gChart.html + Google Chart GraphViz extension for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +(function($){$.extend($.gchart._chartTypes,{graphviz:'gv',gv:'gv'});$.extend($.gchart._typeOptions,{gv:'no'});$.extend($.gchart._prototype.prototype,{graphviz:function(a,b,c,d,e,f){if(arguments.length==1){d=a;a='dot'}var g=typeof a=='string';if(!g){f=e;e=d;d=c;c=b;b=a;a='dot'}if((b&&typeof b!='object')||arguments.length==2||(arguments.length==3&&g)){f=e;e=d;d=c;c=b;b={}}if(typeof c!='boolean'&&arguments.length>1){f=e;e=d;d=c;c=false}b=b||{};b.type='gv'+(a!='dot'?':'+a:'');b.dataLabels=[typeof d=='string'?d:this._genGraph(c,d,e,f)];return b},_genGraph:function(a,b,c,d){d=d||{};var e=(a?'digraph':'graph')+'{';var f='';for(var n in d){e+=f+n;var g='[';for(var h in d[n]){e+=g+h+'='+d[n][h];g=','}e+=(g!='['?']':'');f=';'}for(var i in b||{}){e+=f+i;var g='[';for(var n in b[i]){e+=g+n+'='+b[i][n];g=','}e+=(g!='['?']':'');f=';'}for(var j in c||{}){for(var n in c[j]){e+=f+j+(a?'->':'--')+c[j][n]}f=';'}e+='}';return e},noOptions:function(a,b){return'&chl='+b.substr(1)}})})(jQuery); \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.pack.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.pack.js new file mode 100644 index 0000000..3baaee0 --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.graphviz.pack.js @@ -0,0 +1,8 @@ +/* http://keith-wood.name/gChart.html + Google Chart GraphViz extension for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(7($){$.m($.o.u,{r:\'6\',6:\'6\'});$.m($.o.v,{6:\'w\'});$.m($.o.x.y,{r:7(a,b,c,d,e,f){8(9.k==1){d=a;a=\'p\'}0 g=l a==\'s\';8(!g){f=e;e=d;d=c;c=b;b=a;a=\'p\'}8((b&&l b!=\'z\')||9.k==2||(9.k==3&&g)){f=e;e=d;d=c;c=b;b={}}8(l c!=\'A\'&&9.k>1){f=e;e=d;d=c;c=B}b=b||{};b.C=\'6\'+(a!=\'p\'?\':\'+a:\'\');b.D=[l d==\'s\'?d:E.t(c,d,e,f)];q b},t:7(a,b,c,d){d=d||{};0 e=(a?\'F\':\'G\')+\'{\';0 f=\'\';4(0 n 5 d){e+=f+n;0 g=\'[\';4(0 h 5 d[n]){e+=g+h+\'=\'+d[n][h];g=\',\'}e+=(g!=\'[\'?\']\':\'\');f=\';\'}4(0 i 5 b||{}){e+=f+i;0 g=\'[\';4(0 n 5 b[i]){e+=g+n+\'=\'+b[i][n];g=\',\'}e+=(g!=\'[\'?\']\':\'\');f=\';\'}4(0 j 5 c||{}){4(0 n 5 c[j]){e+=f+j+(a?\'->\':\'--\')+c[j][n]}f=\';\'}e+=\'}\';q e},H:7(a,b){q\'&I=\'+b.J(1)}})})(K);',47,47,'var||||for|in|gv|function|if|arguments|||||||||||length|typeof|extend||gchart|dot|return|graphviz|string|_genGraph|_chartTypes|_typeOptions|no|_prototype|prototype|object|boolean|false|type|dataLabels|this|digraph|graph|noOptions|chl|substr|jQuery'.split('|'),0,{})) \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.js new file mode 100644 index 0000000..570fd5e --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.js @@ -0,0 +1,1279 @@ +/* http://keith-wood.name/gChart.html + Google Chart icons extension for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ + +(function($) { // Hide scope, no $ conflict + +/* Mapping from marker placement names to chart drawing placement codes. */ +var PLACEMENTS = {center: 'h', centre: 'h', left: 'l', right: 'r', h: 'h', l: 'l', r: 'r'}; +/* Mapping from icon tail names to chart tail codes. */ +var TAILS = {bottomLeft: 'bb', topLeft: 'bbtl', topRight: 'bbtr', bottomRight: 'bbbr', none: 'bbT', + bb: 'bb', bbtl: 'bbtl', bbtr: 'bbtr', bbbr: 'bbbr', bbT: 'bbT', + edgeBottomLeft: 'edge_bl', edgeBottomCenter: 'edge_bc', edgeBottomRight: 'edge_br', + edgeTopLeft: 'edge_tl', edgeTopCenter: 'edge_tc', edgeTopRight: 'edge_tr', + edgeLeftTop: 'edge_lt', edgeLeftCenter: 'edge_lc', edgeLeftBottom: 'edge_lb', + edgeRightTop: 'edge_rt', edgeRightCenter: 'edge_rc', edgeRightBottom: 'edge_rb', + edgeBL: 'edge_bl', edgeBC: 'edge_bc', edgeBR: 'edge_br', + edgeTL: 'edge_tl', edgeTC: 'edge_tc', edgeTR: 'edge_tr', + edgeLT: 'edge_lt', edgeLC: 'edge_lc', edgeLB: 'edge_lb', + edgeRT: 'edge_rt', edgeRC: 'edge_rc', edgeRB: 'edge_rb'}; +/* Mapping from icon map pin style names to chart map pin style codes. */ +var PIN_STYLES = {none: 'pin', star: 'pin_star', left: 'pin_sleft', right: 'pin_sright'}; +/* Mapping from icon shadow names to chart icon shadow codes. */ +var SHADOWS = {no: '', yes: '_withshadow', only: '_shadow'}; +/* Mapping from icon note types to chart icon note codes. */ +var NOTES = {arrow: 'arrow_d', balloon: 'balloon', pinned: 'pinned_c', + sticky: 'sticky_y', taped: 'taped_y', thought: 'thought'}; +/* Mapping from contextual alignment names to chart drawing alignment codes. */ +var ALIGNMENTS = {topLeft: 'lt', top: 'ht', topRight: 'rt', left: 'lv', center: 'hv', centre: 'hv', + right: 'rv', bottomLeft: 'lb', bottom: 'hb', bottomRight: 'rb', + tl: 'lt', lt: 'lt', t: 'ht', ht: 'ht', tr: 'rt', rt: 'rt', l: 'l', lv: 'lv', c: 'hv', hc: 'hv', + hv: 'hv', r: 'rv', rv: 'rv', bl: 'lb', lb: 'lb', b: 'hb', hb: 'hb', br: 'rb', rb: 'rb'}; +/* Allowed sizes of icons. */ +var SIZES = {12: 12, 16: 16, 24: 24}; +/* Mapping from embedded chart alignment names to chart drawing alignment codes. */ +var EMBEDDED_ALIGNMENTS = {topLeft: 'tl', top: 'ht', topRight: 'tr', left: 'vl', center: 'hv', centre: 'hv', + right: 'vr', bottomLeft: 'lb', bottom: 'hb', bottomRight: 'rb', + tl: 'tl', t: 'ht', ht: 'ht', tr: 'tr', l: 'vl', vl: 'vl', c: 'hv', + hv: 'hv', r: 'vr', vr: 'vr', bl: 'lb', lb: 'lb', b: 'hb', hb: 'hb', br: 'rb', rb: 'rb'}; + +$.extend($.gchart._defaults, { + icons: [] // Definitions of dynamic icons for the chart, each entry is an object with + // name (string), data (string), series (number), item (number), zIndex (number), + // position (number[2]), offsets (number[2]) + }); + +$.gchart._chartOptions = $.gchart._chartOptions.join().replace(/Markers/, 'Markers,Icons').split(','); + +$.extend($.gchart._prototype.prototype, { + + /* Create a dynamic icon definition. + @param name (string) the name of the icon to use + @param data (string) the icon's encoded parameters + @param series (number, optional) the series to which the icon applies, -1 for freestanding + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + icon: function(name, data, series, item, zIndex, position, offsets) { + if ($.isArray(series)) { + offsets = item; + position = series; + zIndex = null; + item = null; + series = null; + } + if ($.isArray(zIndex)) { + offsets = position; + position = zIndex; + zIndex = null; + } + return {name: name, data: data, series: series || 0, item: (item || item == 0 ? item : 'all'), + zIndex: zIndex, position: position, offsets: offsets}; + }, + + /* Create a bubble icon definition. + @param text (string) the text content, use '|' for line breaks + @param image (string, optional) the name of an inset image + @param tail (string, optional) the type of tail to use + @param large (boolean, optional) true if a large bubble is required + @param shadow (string, optional) 'no', 'yes', 'only' + @param bgColour (string, optional) the icon background's colour + @param colour (string, optional) the icon text's colour + @param series (number, optional) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + bubbleIcon: function(text, image, tail, large, shadow, bgColour, colour, + series, item, zIndex, position, offsets) { + if (typeof image == 'boolean') { + offsets = zIndex; + position = item; + zIndex = series; + item = colour; + series = bgColour; + colour = shadow; + bgColour = large; + shadow = tail; + large = image; + tail = null; + image = null; + } + else if (typeof image == 'number') { + offsets = bgColour; + position = shadow; + zIndex = large; + item = tail; + series = image; + colour = null; + bgColour = null; + shadow = null; + large = null; + tail = null; + image = null; + } + if (typeof tail == 'boolean') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = colour; + colour = bgColour; + bgColour = shadow; + shadow = large; + large = tail; + tail = null; + } + else if (typeof tail == 'number') { + offsets = colour; + position = bgColour; + zIndex = shadow; + item = large; + series = tail; + colour = null; + bgColour = null; + shadow = null; + large = null; + tail = null; + } + if (typeof large == 'number') { + offsets = series; + position = colour; + zIndex = bgColour; + item = shadow; + series = large; + colour = null; + bgColour = null; + shadow = null; + large = null; + } + if (typeof shadow == 'number') { + offsets = item; + position = series; + zIndex = colour; + item = bgColour; + series = shadow; + colour = null; + bgColour = null; + shadow = null; + } + if (typeof bgColour == 'number') { + offsets = zIndex; + position = item; + zIndex = series; + item = colour; + series = bgColour; + colour = null; + bgColour = null; + } + if (typeof colour == 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = colour; + colour = null; + } + var multiline = text.match(/\|/); + var colours = this.color(bgColour || 'white') + ',' + this.color(colour || 'black'); + var data = (image ? image + ',' : '') + (TAILS[tail] || 'bb') + ',' + + (multiline ? colours + ',' : '') + this._escapeIconText(text) + + (multiline ? '' : ',' + colours); + return this.icon('bubble' + (image ? '_icon' : '') + + (multiline || (!image && large) ? '_texts' : '_text') + + (large || multiline ? '_big' : '_small') + SHADOWS[shadow || 'yes'], + data, series, item, zIndex, position, offsets); + }, + + /* Create a map pin icon definition. + @param letter (string) the single letter to show + @param image (string, optional) the name of an inset image + @param style (string, optional) '' or 'none', 'star', 'left', 'right' + @param shadow (string, optional) 'no', 'yes', 'only' + @param bgColour (string, optional) the icon background's colour + @param colour (string, optional) the icon text's colour + @param series (number, optional) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + mapPinIcon: function(letter, image, style, shadow, bgColour, colour, + series, item, zIndex, position, offsets) { + if (typeof image == 'number') { + offsets = colour; + position = bgColour; + zIndex = shadow; + item = style; + series = image; + colour = null; + bgColour = null; + shadow = null; + style = null; + image = null; + } + if (typeof style == 'number') { + offsets = series; + position = colour; + zIndex = bgColour; + item = shadow; + series = style; + colour = null; + bgColour = null; + shadow = null; + style = null; + } + if (typeof shadow == 'number') { + offsets = item; + position = series; + zIndex = colour; + item = bgColour; + series = shadow; + colour = null; + bgColour = null; + shadow = null; + } + if (typeof bgColour == 'number') { + offsets = zIndex; + position = item; + zIndex = series; + item = colour; + series = bgColour; + colour = null; + bgColour = null; + } + if (typeof colour == 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = colour; + colour = null; + } + var data = (style ? (PIN_STYLES[style] || 'pin') + ',' : '') + + (image ? image : this._escapeIconText(letter)) + ',' + this.color(bgColour || 'white') + + (image ? '' : ',' + this.color(colour || 'black')); + return this.icon('map_' + (style ? 'x' : '') + 'pin' + (image ? '_icon' : '_letter') + + SHADOWS[shadow || 'yes'], data, series, item, zIndex, position, offsets); + }, + + /* Create a fun note icon definition. + @param title (string) the note title + @param text (string, optional) the text content, use '|' for line breaks + @param type (string, optional) the type of note to display + @param large (boolean, optional) true if a large note is required + @param alignment (string, optional) 'left', 'right', 'center' + @param colour (string, optional) the icon text's colour + @param series (number, optional) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + noteIcon: function(title, text, type, large, alignment, colour, + series, item, zIndex, position, offsets) { + if (typeof text == 'boolean') { + offsets = zIndex; + position = item; + zIndex = series; + item = colour; + series = alignment; + colour = large; + alignment = type; + large = text; + type = null; + text = null; + } + else if (typeof text == 'number') { + offsets = colour; + position = alignment; + zIndex = large; + item = type; + series = text; + colour = null; + alignment = null; + large = null; + type = null; + text = null; + } + if (typeof type == 'boolean') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = colour; + colour = alignment; + alignment = large; + large = type; + type = null; + } + else if (typeof type == 'number') { + offsets = series; + position = colour; + zIndex = alignment; + item = large; + series = type; + colour = null; + alignment = null; + large = null; + type = null; + } + if (typeof large == 'number') { + offsets = item; + position = series; + zIndex = colour; + item = alignment; + series = large; + colour = null; + alignment = null; + large = null; + } + if (typeof alignment == 'number') { + offsets = zIndex; + position = item; + zIndex = series; + item = colour; + series = alignment; + colour = null; + alignment = null; + } + if (typeof colour == 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = colour; + colour = null; + } + var data = (NOTES[type] || 'sticky_y') + ',' + (large ? '1' : '2') + ',' + + this.color(colour || 'black') + ',' + (PLACEMENTS[alignment] || 'h') + ',' + + (title ? this._escapeIconText(title) + ',' : '') + this._escapeIconText(text || ''); + return this.icon('fnote' + (title ? '_title' : ''), + data, series, item, zIndex, position, offsets); + }, + + /* Create a weather icon definition. + @param title (string) the note title + @param text (string, optional) the text content, use '|' for line breaks + @param type (string, optional) the type of note to display + @param image (string, optional) the name of an inset image + @param series (number, optional) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + weatherIcon: function(title, text, type, image, series, item, zIndex, position, offsets) { + if (typeof text == 'number') { + offsets = item; + position = series; + zIndex = image; + item = type; + series = text; + image = null; + type = null; + text = null; + } + if (typeof type == 'number') { + offsets = zIndex; + position = item; + zIndex = series; + item = image; + series = type; + image = null; + type = null; + } + if (typeof image == 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = image; + image = null; + } + var data = (NOTES[type] || 'sticky_y') + ',' + (image || 'sunny') + ',' + + this._escapeIconText(title || '') + (text ? ',' + this._escapeIconText(text) : ''); + return this.icon('weather', data, series, item, zIndex, position, offsets); + }, + + /* Create a text outline icon definition. + @param text (string) the text content, use '|' for line breaks + @param size (number, optional) the text size in pixels + @param bold (boolean, optional) true for bold + @param alignment (string, optional) 'left', 'right', 'center' + @param colour (string, optional) the icon text's fill colour + @param outline (string, optional) the icon text's outline colour + @param series (number, optional) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + outlineIcon: function(text, size, bold, alignment, colour, outline, + series, item, zIndex, position, offsets) { + if (typeof size == 'boolean') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = outline; + outline = colour; + colour = alignment; + alignment = bold; + bold = size; + size = null; + } + if (typeof size == 'string') { + offsets = zIndex; + position = item; + zIndex = series; + item = outline; + series = colour; + outline = alignment; + colour = bold; + alignment = size; + bold = null; + size = null; + } + if (typeof bold == 'number') { + offsets = series; + position = outline; + zIndex = colour; + item = alignment; + series = bold; + outline = null; + colour = null; + alignment = null; + bold = null; + } + if (typeof alignment == 'number') { + offsets = item; + position = series; + zIndex = outline; + item = colour; + series = alignment; + outline = null; + colour = null; + alignment = null; + } + if (typeof colour == 'number') { + offsets = zIndex; + position = item; + zIndex = series; + item = outline; + series = colour; + outline = null; + colour = null; + } + if (typeof outline == 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = outline; + outline = null; + } + var data = this.color(colour || 'white') + ',' + (size || 10) + ',' + + (PLACEMENTS[alignment] || 'h') + ',' + this.color(outline || 'black') + ',' + + (bold ? 'b' : '_') + ',' + this._escapeIconText(text); + return this.icon('text_outline', data, series, item, zIndex, position, offsets); + }, + + /* Create a colour varying icon definition. + @param image (string) the name of the icon to use + @param colourSeries (number) the series from which colour data is taken + @param colourLow (string[3] or string, optional) the icons' fill colour(s) (default 'green') + @param colourMiddle (string, optional) the icons' middle fill colour (default 'yellow') + @param colourHigh (string, optional) the icons' high fill colour (default 'red') + @param size (number, optional) the icon size in pixels - 12, 16, 24 (default 12) + @param outline (string, optional) the icons' outline colour (default 'black') + @param alignment (string, optional) result of contextualAlignment(...) (default 'hb') + @param series (number) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + colourVaryIcon: function(image, colourSeries, colourLow, colourMiddle, colourHigh, size, outline, alignment, + series, item, zIndex, position, offsets) { + if ($.isArray(colourLow)) { + offsets = zIndex; + position = item; + zIndex = series; + item = alignment; + series = outline; + alignment = size; + outline = colourHigh; + size = colourMiddle; + colourHigh = colourLow[2]; + colourMiddle = colourLow[1]; + colourLow = colourLow[0]; + } + else if (typeof colourLow != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = size; + size = colourHigh; + colourHigh = colourMiddle; + colourMiddle = colourLow; + colourLow = null; + } + if (typeof colourMiddle != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = size; + size = colourHigh; + colourHigh = colourMiddle; + colourMiddle = null; + } + if (typeof colourHigh != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = size; + size = colourHigh; + colourHigh = null; + } + if (typeof size != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = size; + size = null; + } + if (typeof outline != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = null; + } + if (typeof alignment != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = null; + } + var data = image + ',' + (colourSeries || 0) + ',' + this.color(colourLow || 'green') + ',' + + this.color(colourMiddle || 'yellow') + ',' + this.color(colourHigh || 'red') + ',' + + (SIZES[size] || 12) + ',' + this.color(outline || 'black') + ',' + (alignment || 'hb-0-0'); + return this.icon('cm_color', data, series, item, zIndex, position, offsets); + }, + + /* Create a size varying icon definition. + @param image (string) the name of the icon to use + @param sizeSeries (number) the series from which size data is taken + @param zeroSize (number[3] or number, optional) the icons' size at minimum data value (default 4), + or array of this and next two values + @param sizeMultiplier (number, optional) the size scaling factor (default 10) + @param minSize (number, optional) the minimum size for any icon in pixels (default 4) + @param colour (string, optional) the icons' fill colour (default '#88ff88') + @param outline (string, optional) the icons' outline colour (default 'black') + @param alignment (string, optional) result of contextualAlignment(...) (default 'hb') + @param series (number) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + sizeVaryIcon: function(image, sizeSeries, zeroSize, sizeMultiplier, minSize, colour, outline, alignment, + series, item, zIndex, position, offsets) { + if ($.isArray(zeroSize)) { + offsets = zIndex; + position = item; + zIndex = series; + item = alignment; + series = outline; + alignment = colour; + outline = minSize; + colour = sizeMultiplier; + minSize = zeroSize[2]; + sizeMultiplier = zeroSize[1]; + zeroSize = zeroSize[0]; + } + else if (typeof zeroSize != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = colour; + colour = minSize; + minSize = sizeMultiplier; + sizeMultiplier = zeroSize; + zeroSize = null; + } + if (typeof sizeMultiplier != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = colour; + colour = minSize; + minSize = sizeMultiplier; + sizeMultiplier = null; + } + if (typeof minSize != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = colour; + colour = minSize; + minSize = null; + } + if (typeof colour != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = colour; + colour = null; + } + if (typeof outline != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = null; + } + if (typeof alignment != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = null; + } + var data = image + ',' + (sizeSeries || 0) + ',' + (zeroSize || 4) + ',' + + (sizeMultiplier || 10) + ',' + (minSize || 4) + ',' + this.color(outline || 'black') + ',' + + this.color(colour || '#88ff88') + ',' + (alignment || 'hb-0-0'); + return this.icon('cm_size', data, series, item, zIndex, position, offsets); + }, + + /* Create a colour and size varying icon definition. + @param image (string) the name of the icon to use + @param colourSeries (number) the series from which colour data is taken + @param colourLow (string[3] or string, optional) the icons' fill colour(s) (default 'green') + @param colourMiddle (string, optional) the icons' middle fill colour (default 'yellow') + @param colourHigh (string, optional) the icons' high fill colour (default 'red') + @param sizeSeries (number) the series from which size data is taken + @param zeroSize (number[3] or number, optional) the icons' size at minimum data value (default 4), + or array of this and next two values + @param sizeMultiplier (number, optional) the size scaling factor (default 10) + @param minSize (number, optional) the minimum size for any icon in pixels (default 4) + @param outline (string, optional) the icons' outline colour (default 'black') + @param alignment (string, optional) result of contextualAlignment(...) (default 'hb') + @param series (number) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + colourSizeVaryIcon: function(image, colourSeries, colourLow, colourMiddle, colourHigh, + sizeSeries, zeroSize, sizeMultiplier, minSize, outline, alignment, + series, item, zIndex, position, offsets) { + if ($.isArray(colourLow)) { + offsets = zIndex; + position = item; + zIndex = series; + item = alignment; + series = outline; + alignment = minSize; + outline = sizeMultiplier; + minSize = zeroSize; + sizeMultiplier = sizeSeries; + zeroSize = colourHigh; + sizeSeries = colourMiddle; + colourHigh = colourLow[2]; + colourMiddle = colourLow[1]; + colourLow = colourLow[0]; + } + else if (typeof colourLow != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = minSize; + minSize = sizeMultiplier; + sizeMultiplier = zeroSize; + zeroSize = sizeSeries; + sizeSeries = colourHigh; + colourHigh = colourMiddle; + colourMiddle = colourLow; + colourLow = null; + } + if (typeof colourMiddle != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = minSize; + minSize = sizeMultiplier; + sizeMultiplier = zeroSize; + zeroSize = sizeSeries; + sizeSeries = colourHigh; + colourHigh = colourMiddle; + colourMiddle = null; + } + if (typeof colourHigh != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = minSize; + minSize = sizeMultiplier; + sizeMultiplier = zeroSize; + zeroSize = sizeSeries; + sizeSeries = colourHigh; + colourHigh = null; + } + if ($.isArray(zeroSize)) { + offsets = zIndex; + position = item; + zIndex = series; + item = alignment; + series = outline; + alignment = minSize; + outline = sizeMultiplier; + minSize = zeroSize[2]; + sizeMultiplier = zeroSize[1]; + zeroSize = zeroSize[0]; + } + else if (typeof zeroSize != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = minSize; + minSize = sizeMultiplier; + sizeMultiplier = zeroSize; + zeroSize = null; + } + if (typeof sizeMultiplier != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = minSize; + minSize = sizeMultiplier; + sizeMultiplier = null; + } + if (typeof minSize != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = minSize; + minSize = null; + } + if (typeof outline != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = outline; + outline = null; + } + if (typeof alignment != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = null; + } + var data = image + ',' + (colourSeries || 0) + ',' + this.color(colourLow || 'green') + ',' + + this.color(colourMiddle || 'yellow') + ',' + this.color(colourHigh || 'red') + ',' + + (sizeSeries || 0) + ',' + (zeroSize || 4) + ',' + (sizeMultiplier || 10) + ',' + (minSize || 4) + ',' + + this.color(outline || 'black') + ',' + (alignment || 'hb-0-0'); + return this.icon('cm_color_size', data, series, item, zIndex, position, offsets); + }, + + /* Create a stacking icon definition. + @param image (string) the name of the icon to use + @param repeatSeries (number) the series from which repeat data is taken + @param scalingFactor (number, optional) the data value scaling factor (default 10) + @param horizontal (boolean, optional) true if stacking horizontally (default false) + @param size (number, optional) the icons' size - 12, 16, 24 (default 12) + @param colour (string, optional) the icons' fill colour (default '#88f88') + @param outline (string, optional) the icons' outline colour (default 'black') + @param spacing (number, optional) spacing between icons in pixels (default 0) + @param alignment (string, optional) result of contextualAlignment(...) (default 'hb') + @param series (number) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + stackingIcon: function(image, repeatSeries, scalingFactor, horizontal, size, colour, outline, + spacing, alignment, series, item, zIndex, position, offsets) { + if (typeof scalingFactor != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colour; + colour = size; + size = horizontal; + horizontal = scalingFactor; + scalingFactor = null; + } + if (typeof horizontal != 'boolean') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colour; + colour = size; + size = horizontal; + horizontal = null; + } + if (typeof size != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colour; + colour = size; + size = null; + } + if (typeof colour != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colour; + colour = null; + } + if (typeof outline != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = null; + } + if (typeof spacing != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = null; + } + if (typeof alignment != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = null; + } + var data = image + ',' + (repeatSeries || 0) + ',' + (scalingFactor || 10) + ',' + + (horizontal ? 'h' : 'V') + ',' + (SIZES[size] || 12) + ',' + this.color(colour || '#88ff88') + ',' + + this.color(outline || 'black') + ',' + (spacing || 0) + ',' + (alignment || 'hb-0-0'); + return this.icon('cm_repeat', data, series, item, zIndex, position, offsets); + }, + + /* Create a stacking with colour varying icon definition. + @param image (string) the name of the icon to use + @param repeatSeries (number) the series from which repeat data is taken + @param scalingFactor (number, optional) the data value scaling factor (default 10) + @param horizontal (boolean, optional) true if stacking horizontally (default false) + @param size (number, optional) the icons' size - 12, 16, 24 (default 12) + @param colourSeries (number) the series from which colour data is taken + @param colourLow (string[3] or string) the icons' fill colour(s) (default 'green') + @param colourMiddle (string, optional) the icons' middle fill colour (default 'yellow') + @param colourHigh (string, optional) the icons' high fill colour (default 'red') + @param outline (string, optional) the icons' outline colour (default 'black') + @param spacing (number, optional) spacing between icons in pixels (default 0) + @param alignment (string, optional) result of contextualAlignment(...) (default 'hb') + @param series (number) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + stackingColourVaryIcon: function(image, repeatSeries, scalingFactor, horizontal, size, + colourSeries, colourLow, colourMiddle, colourHigh, outline, + spacing, alignment, series, item, zIndex, position, offsets) { + if (typeof scalingFactor != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colourHigh; + colourHigh = colourMiddle; + colourMiddle = colourLow; + colourLow = colourSeries; + colourSeries = size; + size = horizontal; + horizontal = scalingFactor; + scalingFactor = null; + } + if (typeof horizontal != 'boolean') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colourHigh; + colourHigh = colourMiddle; + colourMiddle = colourLow; + colourLow = colourSeries; + colourSeries = size; + size = horizontal; + horizontal = null; + } + if (typeof size != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colourHigh; + colourHigh = colourMiddle; + colourMiddle = colourLow; + colourLow = colourSeries; + colourSeries = size; + size = null; + } + if ($.isArray(colourLow)) { + offsets = zIndex; + position = item; + zIndex = series; + item = alignment; + series = spacing; + alignment = outline; + spacing = colourHigh; + outline = colourMiddle; + colourHigh = colourLow[2]; + colourMiddle = colourLow[1]; + colourLow = colourLow[0]; + } + else if (typeof colourLow != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colourHigh; + colourHigh = colourMiddle; + colourMiddle = colourLow; + colourLow = null; + } + if (typeof colourMiddle != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colourHigh; + colourHigh = colourMiddle; + colourMiddle = null; + } + if (typeof colourHigh != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = colourHigh; + colourHigh = null; + } + if (typeof outline != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = outline; + outline = null; + } + if (typeof spacing != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = spacing; + spacing = null; + } + if (typeof alignment != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = alignment; + alignment = null; + } + var data = image + ',' + (repeatSeries || 0) + ',' + (scalingFactor || 10) + ',' + + (horizontal ? 'h' : 'V') + ',' + (SIZES[size] || 12) + ',' + (colourSeries || 0) + ',' + + this.color(colourLow || 'green') + ',' + this.color(colourMiddle || 'yellow') + ',' + + this.color(colourHigh || 'red') + ',' + this.color(outline || 'black') + ',' + + (spacing || 0) + ',' + (alignment || 'hb-0-0'); + return this.icon('cm_repeat_color', data, series, item, zIndex, position, offsets); + }, + + /* Generate a contextual alignment value. + @param position (string) the anchor point, e.g. 'topLeft', 'center', ... + @param hOffset (number, optional) a horizontal offset (pixels) + @param vOffset (number, optional) a vertical offset (pixels) + @return (string) the alignment property */ + contextualAlignment: function(position, hOffset, vOffset) { + hOffset = hOffset || 0; + vOffset = vOffset || 0; + return (ALIGNMENTS[position] || 'hv') + + (hOffset == 0 ? '-0' : (hOffset > 0 ? '%20' + hOffset : hOffset)) + + (vOffset == 0 ? '-0' : (vOffset > 0 ? '%20' + vOffset : vOffset)); + }, + + /* Generate an embedded chart icon. + @param embeddedOptions (object) the options for the embedded chart + @param bubble (boolean, optional) true if embedded in a bubble (default false) + @param alignment (string, optional) the type of tail to use for a bubble (default 'bottomLeft'), + or the alignment of a non-bubble icon (default 'bottomLeft') + @param padding (number, optional) the padding inside the bubble in pixels (default 4) + @param frameColour (string, optional) the colour of the frame border (default #00d0d0) + @param fillColour (string, optional) the colour of the frame background (default #80ffff) + @param series (number, optional) the series to which the icon applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' (default) + or 'everyn' or [start, end, every] + @param zIndex (number, optional) the z-index (-1.0 to 1.0) + @param position (number[2], optional) an absolute chart position (0.0 to 1.0) + @param offsets (number[2], optional) pixel offsets + @return (object) the icon definition */ + embeddedChart: function(embeddedOptions, bubble, alignment, padding, frameColour, fillColour, + series, item, zIndex, position, offsets) { + if (typeof bubble != 'boolean') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = fillColour; + fillColour = frameColour; + frameColour = padding; + padding = alignment; + alignment = bubble; + bubble = false; + } + if (typeof alignment != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = fillColour; + fillColour = frameColour; + frameColour = padding; + padding = alignment; + alignment = null; + } + if (!bubble) { + offsets = item; + position = series; + zIndex = fillColour; + item = frameColour; + series = padding; + fillColour = null; + frameColour = null; + padding = null; + } + else { + if (typeof padding != 'number') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = fillColour; + fillColour = frameColour; + frameColour = padding; + padding = null; + } + if (typeof frameColour != 'string') { + offsets = zIndex; + position = item; + zIndex = series; + item = fillColour; + series = frameColour; + fillColour = null; + frameColour = null; + } + else if (typeof fillColour != 'string') { + offsets = position; + position = zIndex; + zIndex = item; + item = series; + series = fillColour; + fillColour = null; + } + } + var encodeEmbedded = function(value) { + return value.replace(/%7c/ig, '|').replace(/@/g, '@@').replace(/%/g, '%25'). + replace(/,/g, '@,').replace(/\|/g, '@|').replace(/;/g, '@;'). + replace(/&/g, '%26').replace(/=/g, '%3D'); + }; + var allOptions = $.extend({}, $.gchart._defaults, {width: 120, height: 60}, embeddedOptions); + var embedded = $.gchart._generateChart(allOptions); + embedded = embedded.replace(/^[^\?]+\?/, '').split('&'); + embedded = $.map(embedded, function(value) { + value = value.split('='); + return encodeEmbedded(value[0]) + ',' + encodeEmbedded(value[1]); + }); + var data = (bubble ? (TAILS[alignment] || 'bb') + ',' + (padding == null ? 4 : padding) + ',' + + this.color(frameColour || '#00d0d0') + ',' + this.color(fillColour || '#80ffff') : + (EMBEDDED_ALIGNMENTS[alignment] || 'lb')) + ',' + embedded.join(','); + return this.icon('ec' + (bubble ? 'b' : ''), data, series, item, zIndex, position, offsets); + }, + + /* Generate dynamic icon parameters. + @param type (string) the encoded chart type + @param options (object) the current instance settings + @return (string) the icons parameters */ + addIcons: function(type, options) { + var decodeItem = function(item) { + if (item == 'all') { + return item; + } + if (typeof item == 'string') { + if (/^every(\d+)$/.exec(item)) { + return item.replace(/every/, 'every,'); + } + } + if ($.isArray(item)) { + return 'range,' + item.join(','); + } + return item; + }; + var icons = ''; + var freeIcon = ''; + for (var i = 0; i < options.icons.length; i++) { + var icon = options.icons[i]; + if (icon.series == -1) { + freeIcon = '&chst=d_' + icon.name + '&chld=' + icon.data.replace(/,/g, '|'); + } + else { + icons += '|y;s=' + icon.name + ';d=' + icon.data + + (icon.position ? '' : ';ds=' + icon.series + ';dp=' + decodeItem(icon.item)) + + (icon.zIndex ? ';py=' + icon.zIndex : '') + + (icon.position ? ';po=' + icon.position.join(',') : '') + + (icon.offsets ? ';of=' + icon.offsets.join(',') : ''); + } + } + return (icons ? '&chem=' + icons.substr(1) : '') + freeIcon; + }, + + /* Escape reserved characters in icon text. + @param value (string) the text to escape + @return (string) the escaped text */ + _escapeIconText: function(value) { + return value.replace(/([@=,;])/g, '@$1').replace(/\|/g, ','); + } +}); + +$.extend($.gchart._prototype.prototype, { + colorVaryIcon: $.gchart._prototype.prototype.colourVaryIcon, + colorSizeVaryIcon: $.gchart._prototype.prototype.colourSizeVaryIcon, + stackingColorVaryIcon: $.gchart._prototype.prototype.stackingColourVaryIcon +}); + +})(jQuery); diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.min.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.min.js new file mode 100644 index 0000000..9b8fdf4 --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.icons.min.js @@ -0,0 +1,8 @@ +/* http://keith-wood.name/gChart.html + Google Chart icons extension for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +(function($){var s={center:'h',centre:'h',left:'l',right:'r',h:'h',l:'l',r:'r'};var t={bottomLeft:'bb',topLeft:'bbtl',topRight:'bbtr',bottomRight:'bbbr',none:'bbT',bb:'bb',bbtl:'bbtl',bbtr:'bbtr',bbbr:'bbbr',bbT:'bbT',edgeBottomLeft:'edge_bl',edgeBottomCenter:'edge_bc',edgeBottomRight:'edge_br',edgeTopLeft:'edge_tl',edgeTopCenter:'edge_tc',edgeTopRight:'edge_tr',edgeLeftTop:'edge_lt',edgeLeftCenter:'edge_lc',edgeLeftBottom:'edge_lb',edgeRightTop:'edge_rt',edgeRightCenter:'edge_rc',edgeRightBottom:'edge_rb',edgeBL:'edge_bl',edgeBC:'edge_bc',edgeBR:'edge_br',edgeTL:'edge_tl',edgeTC:'edge_tc',edgeTR:'edge_tr',edgeLT:'edge_lt',edgeLC:'edge_lc',edgeLB:'edge_lb',edgeRT:'edge_rt',edgeRC:'edge_rc',edgeRB:'edge_rb'};var u={none:'pin',star:'pin_star',left:'pin_sleft',right:'pin_sright'};var v={no:'',yes:'_withshadow',only:'_shadow'};var w={arrow:'arrow_d',balloon:'balloon',pinned:'pinned_c',sticky:'sticky_y',taped:'taped_y',thought:'thought'};var x={topLeft:'lt',top:'ht',topRight:'rt',left:'lv',center:'hv',centre:'hv',right:'rv',bottomLeft:'lb',bottom:'hb',bottomRight:'rb',tl:'lt',lt:'lt',t:'ht',ht:'ht',tr:'rt',rt:'rt',l:'l',lv:'lv',c:'hv',hc:'hv',hv:'hv',r:'rv',rv:'rv',bl:'lb',lb:'lb',b:'hb',hb:'hb',br:'rb',rb:'rb'};var y={12:12,16:16,24:24};var z={topLeft:'tl',top:'ht',topRight:'tr',left:'vl',center:'hv',centre:'hv',right:'vr',bottomLeft:'lb',bottom:'hb',bottomRight:'rb',tl:'tl',t:'ht',ht:'ht',tr:'tr',l:'vl',vl:'vl',c:'hv',hv:'hv',r:'vr',vr:'vr',bl:'lb',lb:'lb',b:'hb',hb:'hb',br:'rb',rb:'rb'};$.extend($.gchart._defaults,{icons:[]});$.gchart._chartOptions=$.gchart._chartOptions.join().replace(/Markers/,'Markers,Icons').split(',');$.extend($.gchart._prototype.prototype,{icon:function(a,b,c,d,e,f,g){if($.isArray(c)){g=d;f=c;e=null;d=null;c=null}if($.isArray(e)){g=f;f=e;e=null}return{name:a,data:b,series:c||0,item:(d||d==0?d:'all'),zIndex:e,position:f,offsets:g}},bubbleIcon:function(a,b,c,d,e,f,g,h,i,j,k,l){if(typeof b=='boolean'){l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c;d=b;c=null;b=null}else if(typeof b=='number'){l=f;k=e;j=d;i=c;h=b;g=null;f=null;e=null;d=null;c=null;b=null}if(typeof c=='boolean'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}else if(typeof c=='number'){l=g;k=f;j=e;i=d;h=c;g=null;f=null;e=null;d=null;c=null}if(typeof d=='number'){l=h;k=g;j=f;i=e;h=d;g=null;f=null;e=null;d=null}if(typeof e=='number'){l=i;k=h;j=g;i=f;h=e;g=null;f=null;e=null}if(typeof f=='number'){l=j;k=i;j=h;i=g;h=f;g=null;f=null}if(typeof g=='number'){l=k;k=j;j=i;i=h;h=g;g=null}var m=a.match(/\|/);var n=this.color(f||'white')+','+this.color(g||'black');var o=(b?b+',':'')+(t[c]||'bb')+','+(m?n+',':'')+this._escapeIconText(a)+(m?'':','+n);return this.icon('bubble'+(b?'_icon':'')+(m||(!b&&d)?'_texts':'_text')+(d||m?'_big':'_small')+v[e||'yes'],o,h,i,j,k,l)},mapPinIcon:function(a,b,c,d,e,f,g,h,i,j,k){if(typeof b=='number'){k=f;j=e;i=d;h=c;g=b;f=null;e=null;d=null;c=null;b=null}if(typeof c=='number'){k=g;j=f;i=e;h=d;g=c;f=null;e=null;d=null;c=null}if(typeof d=='number'){k=h;j=g;i=f;h=e;g=d;f=null;e=null;d=null}if(typeof e=='number'){k=i;j=h;i=g;h=f;g=e;f=null;e=null}if(typeof f=='number'){k=j;j=i;i=h;h=g;g=f;f=null}var l=(c?(u[c]||'pin')+',':'')+(b?b:this._escapeIconText(a))+','+this.color(e||'white')+(b?'':','+this.color(f||'black'));return this.icon('map_'+(c?'x':'')+'pin'+(b?'_icon':'_letter')+v[d||'yes'],l,g,h,i,j,k)},noteIcon:function(a,b,c,d,e,f,g,h,i,j,k){if(typeof b=='boolean'){k=i;j=h;i=g;h=f;g=e;f=d;e=c;d=b;c=null;b=null}else if(typeof b=='number'){k=f;j=e;i=d;h=c;g=b;f=null;e=null;d=null;c=null;b=null}if(typeof c=='boolean'){k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}else if(typeof c=='number'){k=g;j=f;i=e;h=d;g=c;f=null;e=null;d=null;c=null}if(typeof d=='number'){k=h;j=g;i=f;h=e;g=d;f=null;e=null;d=null}if(typeof e=='number'){k=i;j=h;i=g;h=f;g=e;f=null;e=null}if(typeof f=='number'){k=j;j=i;i=h;h=g;g=f;f=null}var l=(w[c]||'sticky_y')+','+(d?'1':'2')+','+this.color(f||'black')+','+(s[e]||'h')+','+(a?this._escapeIconText(a)+',':'')+this._escapeIconText(b||'');return this.icon('fnote'+(a?'_title':''),l,g,h,i,j,k)},weatherIcon:function(a,b,c,d,e,f,g,h,i){if(typeof b=='number'){i=f;h=e;g=d;f=c;e=b;d=null;c=null;b=null}if(typeof c=='number'){i=g;h=f;g=e;f=d;e=c;d=null;c=null}if(typeof d=='number'){i=h;h=g;g=f;f=e;e=d;d=null}var j=(w[c]||'sticky_y')+','+(d||'sunny')+','+this._escapeIconText(a||'')+(b?','+this._escapeIconText(b):'');return this.icon('weather',j,e,f,g,h,i)},outlineIcon:function(a,b,c,d,e,f,g,h,i,j,k){if(typeof b=='boolean'){k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=b;b=null}if(typeof b=='string'){k=i;j=h;i=g;h=f;g=e;f=d;e=c;d=b;c=null;b=null}if(typeof c=='number'){k=g;j=f;i=e;h=d;g=c;f=null;e=null;d=null;c=null}if(typeof d=='number'){k=h;j=g;i=f;h=e;g=d;f=null;e=null;d=null}if(typeof e=='number'){k=i;j=h;i=g;h=f;g=e;f=null;e=null}if(typeof f=='number'){k=j;j=i;i=h;h=g;g=f;f=null}var l=this.color(e||'white')+','+(b||10)+','+(s[d]||'h')+','+this.color(f||'black')+','+(c?'b':'_')+','+this._escapeIconText(a);return this.icon('text_outline',l,g,h,i,j,k)},colourVaryIcon:function(a,b,c,d,e,f,g,h,i,j,k,l,m){if($.isArray(c)){m=k;l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c[2];d=c[1];c=c[0]}else if(typeof c!='string'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}if(typeof d!='string'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=null}if(typeof e!='string'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=null}if(typeof f!='number'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=null}if(typeof g!='string'){m=l;l=k;k=j;j=i;i=h;h=g;g=null}if(typeof h!='string'){m=l;l=k;k=j;j=i;i=h;h=null}var n=a+','+(b||0)+','+this.color(c||'green')+','+this.color(d||'yellow')+','+this.color(e||'red')+','+(y[f]||12)+','+this.color(g||'black')+','+(h||'hb-0-0');return this.icon('cm_color',n,i,j,k,l,m)},sizeVaryIcon:function(a,b,c,d,e,f,g,h,i,j,k,l,m){if($.isArray(c)){m=k;l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c[2];d=c[1];c=c[0]}else if(typeof c!='number'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}if(typeof d!='number'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=null}if(typeof e!='number'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=null}if(typeof f!='string'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=null}if(typeof g!='string'){m=l;l=k;k=j;j=i;i=h;h=g;g=null}if(typeof h!='string'){m=l;l=k;k=j;j=i;i=h;h=null}var n=a+','+(b||0)+','+(c||4)+','+(d||10)+','+(e||4)+','+this.color(g||'black')+','+this.color(f||'#88ff88')+','+(h||'hb-0-0');return this.icon('cm_size',n,i,j,k,l,m)},colourSizeVaryIcon:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){if($.isArray(c)){p=n;o=m;n=l;m=k;l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c[2];d=c[1];c=c[0]}else if(typeof c!='string'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}if(typeof d!='string'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=null}if(typeof e!='string'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=null}if($.isArray(g)){p=n;o=m;n=l;m=k;l=j;k=i;j=h;i=g[2];h=g[1];g=g[0]}else if(typeof g!='number'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=null}if(typeof h!='number'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=null}if(typeof i!='number'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=null}if(typeof j!='string'){p=o;o=n;n=m;m=l;l=k;k=j;j=null}if(typeof k!='string'){p=o;o=n;n=m;m=l;l=k;k=null}var q=a+','+(b||0)+','+this.color(c||'green')+','+this.color(d||'yellow')+','+this.color(e||'red')+','+(f||0)+','+(g||4)+','+(h||10)+','+(i||4)+','+this.color(j||'black')+','+(k||'hb-0-0');return this.icon('cm_color_size',q,l,m,n,o,p)},stackingIcon:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){if(typeof c!='number'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}if(typeof d!='boolean'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=null}if(typeof e!='number'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=null}if(typeof f!='string'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=null}if(typeof g!='string'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=null}if(typeof h!='number'){n=m;m=l;l=k;k=j;j=i;i=h;h=null}if(typeof i!='string'){n=m;m=l;l=k;k=j;j=i;i=null}var o=a+','+(b||0)+','+(c||10)+','+(d?'h':'V')+','+(y[e]||12)+','+this.color(f||'#88ff88')+','+this.color(g||'black')+','+(h||0)+','+(i||'hb-0-0');return this.icon('cm_repeat',o,j,k,l,m,n)},stackingColourVaryIcon:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){if(typeof c!='number'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=null}if(typeof d!='boolean'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=null}if(typeof e!='number'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=null}if($.isArray(g)){q=o;p=n;o=m;n=l;m=k;l=j;k=i;j=h;i=g[2];h=g[1];g=g[0]}else if(typeof g!='string'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=null}if(typeof h!='string'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=null}if(typeof i!='string'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=null}if(typeof j!='string'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=null}if(typeof k!='number'){q=p;p=o;o=n;n=m;m=l;l=k;k=null}if(typeof l!='string'){q=p;p=o;o=n;n=m;m=l;l=null}var r=a+','+(b||0)+','+(c||10)+','+(d?'h':'V')+','+(y[e]||12)+','+(f||0)+','+this.color(g||'green')+','+this.color(h||'yellow')+','+this.color(i||'red')+','+this.color(j||'black')+','+(k||0)+','+(l||'hb-0-0');return this.icon('cm_repeat_color',r,m,n,o,p,q)},contextualAlignment:function(a,b,c){b=b||0;c=c||0;return(x[a]||'hv')+(b==0?'-0':(b>0?'%20'+b:b))+(c==0?'-0':(c>0?'%20'+c:c))},embeddedChart:function(b,c,d,e,f,g,h,i,j,k,l){if(typeof c!='boolean'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=false}if(typeof d!='string'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=null}if(!c){l=i;k=h;j=g;i=f;h=e;g=null;f=null;e=null}else{if(typeof e!='number'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=null}if(typeof f!='string'){l=j;k=i;j=h;i=g;h=f;g=null;f=null}else if(typeof g!='string'){l=k;k=j;j=i;i=h;h=g;g=null}}var m=function(a){return a.replace(/%7c/ig,'|').replace(/@/g,'@@').replace(/%/g,'%25').replace(/,/g,'@,').replace(/\|/g,'@|').replace(/;/g,'@;').replace(/&/g,'%26').replace(/=/g,'%3D')};var n=$.extend({},$.gchart._defaults,{width:120,height:60},b);var o=$.gchart._generateChart(n);o=o.replace(/^[^\?]+\?/,'').split('&');o=$.map(o,function(a){a=a.split('=');return m(a[0])+','+m(a[1])});var p=(c?(t[d]||'bb')+','+(e==null?4:e)+','+this.color(f||'#00d0d0')+','+this.color(g||'#80ffff'):(z[d]||'lb'))+','+o.join(',');return this.icon('ec'+(c?'b':''),p,h,i,j,k,l)},addIcons:function(b,c){var d=function(a){if(a=='all'){return a}if(typeof a=='string'){if(/^every(\d+)$/.exec(a)){return a.replace(/every/,'every,')}}if($.isArray(a)){return'range,'+a.join(',')}return a};var e='';var f='';for(var i=0;i35?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}('(D($){9 s={1a:\'h\',1b:\'h\',W:\'l\',X:\'r\',h:\'h\',l:\'l\',r:\'r\'};9 t={1c:\'R\',1d:\'1e\',1f:\'1g\',1h:\'1i\',1A:\'1j\',R:\'R\',1e:\'1e\',1g:\'1g\',1i:\'1i\',1j:\'1j\',27:\'1B\',28:\'1C\',29:\'1D\',2a:\'1E\',2b:\'1F\',2c:\'1G\',2d:\'1H\',2e:\'1I\',2f:\'1J\',2g:\'1K\',2h:\'1L\',2i:\'1M\',2j:\'1B\',2k:\'1C\',2l:\'1D\',2m:\'1E\',2n:\'1F\',2o:\'1G\',2p:\'1H\',2q:\'1I\',2r:\'1J\',2s:\'1K\',2t:\'1L\',2u:\'1M\'};9 u={1A:\'1k\',2v:\'2w\',W:\'2x\',X:\'2y\'};9 v={2z:\'\',1l:\'2A\',2B:\'2C\'};9 w={2D:\'2E\',1N:\'1N\',2F:\'2G\',2H:\'1m\',2I:\'2J\',1O:\'1O\'};9 x={1d:\'Y\',1P:\'M\',1f:\'Z\',W:\'1n\',1a:\'G\',1b:\'G\',X:\'11\',1c:\'K\',1Q:\'F\',1h:\'N\',13:\'Y\',Y:\'Y\',t:\'M\',M:\'M\',14:\'Z\',Z:\'Z\',l:\'l\',1n:\'1n\',c:\'G\',2K:\'G\',G:\'G\',r:\'11\',11:\'11\',1R:\'K\',K:\'K\',b:\'F\',F:\'F\',1S:\'N\',N:\'N\'};9 y={12:12,16:16,24:24};9 z={1d:\'13\',1P:\'M\',1f:\'14\',W:\'15\',1a:\'G\',1b:\'G\',X:\'17\',1c:\'K\',1Q:\'F\',1h:\'N\',13:\'13\',t:\'M\',M:\'M\',14:\'14\',l:\'15\',15:\'15\',c:\'G\',G:\'G\',r:\'17\',17:\'17\',1R:\'K\',K:\'K\',b:\'F\',F:\'F\',1S:\'N\',N:\'N\'};$.18($.J.1T,{1o:[]});$.J.1U=$.J.1U.S().E(/1V/,\'1V,2L\').1p(\',\');$.18($.J.T.U,{H:D(a,b,c,d,e,f,g){5($.O(c)){g=d;f=c;e=3;d=3;c=3}5($.O(e)){g=f;f=e;e=3}C{1q:a,1r:b,1s:c||0,1W:(d||d==0?d:\'1X\'),1t:e,19:f,1u:g}},2M:D(a,b,c,d,e,f,g,h,i,j,k,l){5(6 b==\'P\'){l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c;d=b;c=3;b=3}I 5(6 b==\'8\'){l=f;k=e;j=d;i=c;h=b;g=3;f=3;e=3;d=3;c=3;b=3}5(6 c==\'P\'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}I 5(6 c==\'8\'){l=g;k=f;j=e;i=d;h=c;g=3;f=3;e=3;d=3;c=3}5(6 d==\'8\'){l=h;k=g;j=f;i=e;h=d;g=3;f=3;e=3;d=3}5(6 e==\'8\'){l=i;k=h;j=g;i=f;h=e;g=3;f=3;e=3}5(6 f==\'8\'){l=j;k=i;j=h;i=g;h=f;g=3;f=3}5(6 g==\'8\'){l=k;k=j;j=i;i=h;h=g;g=3}9 m=a.2N(/\\|/);9 n=7.B(f||\'1v\')+\',\'+7.B(g||\'L\');9 o=(b?b+\',\':\'\')+(t[c]||\'R\')+\',\'+(m?n+\',\':\'\')+7.Q(a)+(m?\'\':\',\'+n);C 7.H(\'2O\'+(b?\'1Y\':\'\')+(m||(!b&&d)?\'2P\':\'2Q\')+(d||m?\'2R\':\'2S\')+v[e||\'1l\'],o,h,i,j,k,l)},2T:D(a,b,c,d,e,f,g,h,i,j,k){5(6 b==\'8\'){k=f;j=e;i=d;h=c;g=b;f=3;e=3;d=3;c=3;b=3}5(6 c==\'8\'){k=g;j=f;i=e;h=d;g=c;f=3;e=3;d=3;c=3}5(6 d==\'8\'){k=h;j=g;i=f;h=e;g=d;f=3;e=3;d=3}5(6 e==\'8\'){k=i;j=h;i=g;h=f;g=e;f=3;e=3}5(6 f==\'8\'){k=j;j=i;i=h;h=g;g=f;f=3}9 l=(c?(u[c]||\'1k\')+\',\':\'\')+(b?b:7.Q(a))+\',\'+7.B(e||\'1v\')+(b?\'\':\',\'+7.B(f||\'L\'));C 7.H(\'2U\'+(c?\'x\':\'\')+\'1k\'+(b?\'1Y\':\'2V\')+v[d||\'1l\'],l,g,h,i,j,k)},2W:D(a,b,c,d,e,f,g,h,i,j,k){5(6 b==\'P\'){k=i;j=h;i=g;h=f;g=e;f=d;e=c;d=b;c=3;b=3}I 5(6 b==\'8\'){k=f;j=e;i=d;h=c;g=b;f=3;e=3;d=3;c=3;b=3}5(6 c==\'P\'){k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}I 5(6 c==\'8\'){k=g;j=f;i=e;h=d;g=c;f=3;e=3;d=3;c=3}5(6 d==\'8\'){k=h;j=g;i=f;h=e;g=d;f=3;e=3;d=3}5(6 e==\'8\'){k=i;j=h;i=g;h=f;g=e;f=3;e=3}5(6 f==\'8\'){k=j;j=i;i=h;h=g;g=f;f=3}9 l=(w[c]||\'1m\')+\',\'+(d?\'1\':\'2\')+\',\'+7.B(f||\'L\')+\',\'+(s[e]||\'h\')+\',\'+(a?7.Q(a)+\',\':\'\')+7.Q(b||\'\');C 7.H(\'2X\'+(a?\'2Y\':\'\'),l,g,h,i,j,k)},2Z:D(a,b,c,d,e,f,g,h,i){5(6 b==\'8\'){i=f;h=e;g=d;f=c;e=b;d=3;c=3;b=3}5(6 c==\'8\'){i=g;h=f;g=e;f=d;e=c;d=3;c=3}5(6 d==\'8\'){i=h;h=g;g=f;f=e;e=d;d=3}9 j=(w[c]||\'1m\')+\',\'+(d||\'30\')+\',\'+7.Q(a||\'\')+(b?\',\'+7.Q(b):\'\');C 7.H(\'31\',j,e,f,g,h,i)},32:D(a,b,c,d,e,f,g,h,i,j,k){5(6 b==\'P\'){k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=b;b=3}5(6 b==\'A\'){k=i;j=h;i=g;h=f;g=e;f=d;e=c;d=b;c=3;b=3}5(6 c==\'8\'){k=g;j=f;i=e;h=d;g=c;f=3;e=3;d=3;c=3}5(6 d==\'8\'){k=h;j=g;i=f;h=e;g=d;f=3;e=3;d=3}5(6 e==\'8\'){k=i;j=h;i=g;h=f;g=e;f=3;e=3}5(6 f==\'8\'){k=j;j=i;i=h;h=g;g=f;f=3}9 l=7.B(e||\'1v\')+\',\'+(b||10)+\',\'+(s[d]||\'h\')+\',\'+7.B(f||\'L\')+\',\'+(c?\'b\':\'33\')+\',\'+7.Q(a);C 7.H(\'34\',l,g,h,i,j,k)},1Z:D(a,b,c,d,e,f,g,h,i,j,k,l,m){5($.O(c)){m=k;l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c[2];d=c[1];c=c[0]}I 5(6 c!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}5(6 d!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=3}5(6 e!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=3}5(6 f!=\'8\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=3}5(6 g!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=g;g=3}5(6 h!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=3}9 n=a+\',\'+(b||0)+\',\'+7.B(c||\'1w\')+\',\'+7.B(d||\'1x\')+\',\'+7.B(e||\'1y\')+\',\'+(y[f]||12)+\',\'+7.B(g||\'L\')+\',\'+(h||\'F-0-0\');C 7.H(\'35\',n,i,j,k,l,m)},36:D(a,b,c,d,e,f,g,h,i,j,k,l,m){5($.O(c)){m=k;l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c[2];d=c[1];c=c[0]}I 5(6 c!=\'8\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}5(6 d!=\'8\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=3}5(6 e!=\'8\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=3}5(6 f!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=3}5(6 g!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=g;g=3}5(6 h!=\'A\'){m=l;l=k;k=j;j=i;i=h;h=3}9 n=a+\',\'+(b||0)+\',\'+(c||4)+\',\'+(d||10)+\',\'+(e||4)+\',\'+7.B(g||\'L\')+\',\'+7.B(f||\'#21\')+\',\'+(h||\'F-0-0\');C 7.H(\'37\',n,i,j,k,l,m)},22:D(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){5($.O(c)){p=n;o=m;n=l;m=k;l=j;k=i;j=h;i=g;h=f;g=e;f=d;e=c[2];d=c[1];c=c[0]}I 5(6 c!=\'A\'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}5(6 d!=\'A\'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=3}5(6 e!=\'A\'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=3}5($.O(g)){p=n;o=m;n=l;m=k;l=j;k=i;j=h;i=g[2];h=g[1];g=g[0]}I 5(6 g!=\'8\'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=3}5(6 h!=\'8\'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=3}5(6 i!=\'8\'){p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=3}5(6 j!=\'A\'){p=o;o=n;n=m;m=l;l=k;k=j;j=3}5(6 k!=\'A\'){p=o;o=n;n=m;m=l;l=k;k=3}9 q=a+\',\'+(b||0)+\',\'+7.B(c||\'1w\')+\',\'+7.B(d||\'1x\')+\',\'+7.B(e||\'1y\')+\',\'+(f||0)+\',\'+(g||4)+\',\'+(h||10)+\',\'+(i||4)+\',\'+7.B(j||\'L\')+\',\'+(k||\'F-0-0\');C 7.H(\'38\',q,l,m,n,o,p)},39:D(a,b,c,d,e,f,g,h,i,j,k,l,m,n){5(6 c!=\'8\'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}5(6 d!=\'P\'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=3}5(6 e!=\'8\'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=3}5(6 f!=\'A\'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=3}5(6 g!=\'A\'){n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=3}5(6 h!=\'8\'){n=m;m=l;l=k;k=j;j=i;i=h;h=3}5(6 i!=\'A\'){n=m;m=l;l=k;k=j;j=i;i=3}9 o=a+\',\'+(b||0)+\',\'+(c||10)+\',\'+(d?\'h\':\'V\')+\',\'+(y[e]||12)+\',\'+7.B(f||\'#21\')+\',\'+7.B(g||\'L\')+\',\'+(h||0)+\',\'+(i||\'F-0-0\');C 7.H(\'3a\',o,j,k,l,m,n)},23:D(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){5(6 c!=\'8\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3}5(6 d!=\'P\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=3}5(6 e!=\'8\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=3}5($.O(g)){q=o;p=n;o=m;n=l;m=k;l=j;k=i;j=h;i=g[2];h=g[1];g=g[0]}I 5(6 g!=\'A\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=g;g=3}5(6 h!=\'A\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=h;h=3}5(6 i!=\'A\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=i;i=3}5(6 j!=\'A\'){q=p;p=o;o=n;n=m;m=l;l=k;k=j;j=3}5(6 k!=\'8\'){q=p;p=o;o=n;n=m;m=l;l=k;k=3}5(6 l!=\'A\'){q=p;p=o;o=n;n=m;m=l;l=3}9 r=a+\',\'+(b||0)+\',\'+(c||10)+\',\'+(d?\'h\':\'V\')+\',\'+(y[e]||12)+\',\'+(f||0)+\',\'+7.B(g||\'1w\')+\',\'+7.B(h||\'1x\')+\',\'+7.B(i||\'1y\')+\',\'+7.B(j||\'L\')+\',\'+(k||0)+\',\'+(l||\'F-0-0\');C 7.H(\'3b\',r,m,n,o,p,q)},3c:D(a,b,c){b=b||0;c=c||0;C(x[a]||\'G\')+(b==0?\'-0\':(b>0?\'%20\'+b:b))+(c==0?\'-0\':(c>0?\'%20\'+c:c))},3d:D(b,c,d,e,f,g,h,i,j,k,l){5(6 c!=\'P\'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=c;c=3e}5(6 d!=\'A\'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=d;d=3}5(!c){l=i;k=h;j=g;i=f;h=e;g=3;f=3;e=3}I{5(6 e!=\'8\'){l=k;k=j;j=i;i=h;h=g;g=f;f=e;e=3}5(6 f!=\'A\'){l=j;k=i;j=h;i=g;h=f;g=3;f=3}I 5(6 g!=\'A\'){l=k;k=j;j=i;i=h;h=g;g=3}}9 m=D(a){C a.E(/%3f/3g,\'|\').E(/@/g,\'@@\').E(/%/g,\'%25\').E(/,/g,\'@,\').E(/\\|/g,\'@|\').E(/;/g,\'@;\').E(/&/g,\'%26\').E(/=/g,\'%3D\')};9 n=$.18({},$.J.1T,{3h:3i,3j:3k},b);9 o=$.J.3l(n);o=o.E(/^[^\\?]+\\?/,\'\').1p(\'&\');o=$.3m(o,D(a){a=a.1p(\'=\');C m(a[0])+\',\'+m(a[1])});9 p=(c?(t[d]||\'R\')+\',\'+(e==3?4:e)+\',\'+7.B(f||\'#3n\')+\',\'+7.B(g||\'#3o\'):(z[d]||\'K\'))+\',\'+o.S(\',\');C 7.H(\'3p\'+(c?\'b\':\'\'),p,h,i,j,k,l)},3q:D(b,c){9 d=D(a){5(a==\'1X\'){C a}5(6 a==\'A\'){5(/^1z(\\d+)$/.3r(a)){C a.E(/1z/,\'1z,\')}}5($.O(a)){C\'3s,\'+a.S(\',\')}C a};9 e=\'\';9 f=\'\';3t(9 i=0;i -1) { // Note the positions of the columns + sColumns[i] = val; + } + else if (val.match(/^x\d+$/)) { // Column with x-coordinate + xColumns[i] = val; + } + }); + } + else { + var series = {}; + var data = []; + var saveX = null; + $.each(cols, function(i, val) { + if (sColumns[i]) { // Non-data value + var pos = $.inArray(sColumns[i], fields); + series[sColumns[i]] = (pos > 2 ? $.gchart._numeric(val, 0) : val); + } + else if (xColumns[i]) { // X-coordinate + saveX = (val ? $.gchart._numeric(val, -1) : null); + xyData = true; + } + else { + var y = $.gchart._numeric(val, -1); + data.push(saveX != null ? [saveX, y] : y); + saveX = null; + } + }); + if (series.lineSegmentLine != null && series.lineSegmentGap != null) { + series.lineSegments = [series.lineSegmentLine, series.lineSegmentGap]; + series.lineSegmentLine = series.lineSegmentGap = null; + } + seriesData.push($.extend(series, {data: data})); + } + }); + return (xyData ? this.seriesForXYLines(seriesData) : seriesData); + }, + + /* Load series data from XML. All attributes are optional except point/@y. + + + + ... + + ... + + @param xml (string or Document) the XML containing the series data + @return (object[]) the series definitions */ + seriesFromXml: function(xml) { + if ($.browser.msie && typeof xml == 'string') { + var doc = new ActiveXObject('Microsoft.XMLDOM'); + doc.validateOnParse = false; + doc.resolveExternals = false; + doc.loadXML(xml); + xml = doc; + } + xml = $(xml); + var seriesData = []; + var xyData = false; + try { + xml.find('series').each(function() { + var series = $(this); + var data = []; + series.find('point').each(function() { + var point = $(this); + var x = point.attr('x'); + if (x != null) { + xyData = true; + x = $.gchart._numeric(x, -1); + } + y = $.gchart._numeric(point.attr('y'), -1); + data.push(x ? [x, y] : y); + }); + var segments = series.attr('lineSegments'); + if (segments) { + segments = segments.split(','); + for (var i = 0; i < segments.length; i++) { + segments[i] = $.gchart._numeric(segments[i], 1); + } + } + seriesData.push({label: series.attr('label'), data: data, + color: series.attr('color'), fillColor: series.attr('fillColor'), + minValue: $.gchart._numeric(series.attr('minValue'), null), + maxValue: $.gchart._numeric(series.attr('maxValue'), null), + lineThickness: $.gchart._numeric(series.attr('lineThickness'), null), + lineSegments: segments}); + }); + } + catch (e) { + // Ignore + } + return (xyData ? this.seriesForXYLines(seriesData) : seriesData); + }, + + /* Force a value to be numeric. + @param val (string) the value to convert + @param whenNaN (number) value to use if not numeric + @return (number) the numeric equivalent or whenNaN if not numeric */ + _numeric: function(val, whenNaN) { + val = parseFloat(val); + return (isNaN(val) ? whenNaN : val); + }, + + /* Prepare series for a line XY chart. + @param series (object[]) the details of the points to plot, + each data value may be an array of two points + @return (object[]) the transformed series + @deprecated in favour of seriesForXYLines */ + lineXYSeries: function(series) { + return this.seriesForXYLines(series); + }, + + /* Prepare series for a line XY chart. + @param series (object[]) the details of the points to plot, + each data value may be an array of two points + @return (object[]) the transformed series */ + seriesForXYLines: function(series) { + var xySeries = []; + for (var i = 0; i < series.length; i++) { + var xNull = !$.isArray(series[i].data[0]); + var xData = (xNull ? [null] : []); + var yData = []; + for (var j = 0; j < series[i].data.length; j++) { + if (xNull) { + yData.push(series[i].data[j]); + } + else { + xData.push(series[i].data[j][0]); + yData.push(series[i].data[j][1]); + } + } + xySeries.push($.gchart.series(series[i].label, xData, series[i].color, + series[i].fillColor, series[i].minValue, series[i].maxValue, + series[i].lineThickness, series[i].lineSegments)); + xySeries.push($.gchart.series('', yData, '', + series[i].fillColor, series[i].minValue, series[i].maxValue, + series[i].lineThickness, series[i].lineSegments)); + } + return xySeries; + }, + + /* Generate a data function definition. + @param series (number) the output series to generate into + @param data (object[]) the function variables list or + (string) the name of a single variable + @param series (number, optional) the input series to use for the variable data or + the start of a generated range (with end/step) + @param end (number, optional) the end of the generated range + @param step (number, optional) the step between values in the generated range + @param fnText (string) the function call, using the variable(s) above, + in muParser function syntax + @return (object) the data function definition */ + fn: function(series, data, start, end, step, fnText) { + if (typeof end == 'string') { + fnText = end; + end = null; + step = null; + } + if (typeof start == 'string') { + fnText = start; + start = null; + end = null; + step = null; + } + if (typeof data == 'string') { + data = this.fnVar(data, start, end, step); + } + return {series: series, data: data, fnText: fnText}; + }, + + /* Generate a function variable definition. + @param name (string) the variable name + @param start (number) the input series to use for the variable data or + (number) the start of a generated range (with end/step) + @param end (number, optional) the end of the generated range + @param step (number, optional) the step between values in the generated range + @return (object) the function variable definition */ + fnVar: function(name, start, end, step) { + return {name: name, series: (step ? -1 : start), + start: (step ? start : null), end: end, step: step}; + }, + + /* Generate a Google chart color. + @param r (string) colour name or '#hhhhhh' or + (number) red value (0-255) + @param g (number) green value (0-255) or + (number) alpha value (0-255, optional) if r is name + @param b (number) blue value (0-255) + @param a (number) alpha value (0-255, optional) + @return (string) the translated colour */ + color: function(r, g, b, a) { + var checkRange = function(value) { + if (typeof value == 'number' && (value < 0 || value > 255)) { + throw 'Value out of range (0-255) ' + value; + } + }; + var twoDigits = function(value) { + return (value.length == 1 ? '0' : '') + value; + }; + if (typeof r == 'string') { + checkRange(g); + return (r.match(/^#([A-Fa-f0-9]{2}){3,4}$/) ? r.substring(1) : + (COLOURS[r] || r) + (g ? twoDigits(g.toString(16)) : '')); + } + checkRange(r); + checkRange(g); + checkRange(b); + checkRange(a); + return twoDigits(r.toString(16)) + twoDigits(g.toString(16)) + + twoDigits(b.toString(16)) + (a ? twoDigits(a.toString(16)) : ''); + }, + + /* Create a simple linear gradient definition for a background. + @param angle (string or number) the angle of the gradient from positive x-axis + @param colours (string[]) an array of colours or + (string) the starting colour + @param positions (number[], optional) the positions (0.0 to 1.0) of the gradient colours or + (string, optional) the ending colour + @return (object) the gradient definition */ + gradient: function(angle, colours, positions) { + var colourPoints = []; + if ($.isArray(colours)) { + var step = 1 / (colours.length - 1); + for (var i = 0; i < colours.length; i++) { + colourPoints.push([colours[i], (positions ? positions[i] : Math.round(i * step * 100) / 100)]); + } + } + else { + colourPoints = [[colours, 0], [positions, 1]]; + } + return {angle: angle, colorPoints: colourPoints}; + }, + + /* Create a colour striping definition for a background. + @param angle (string or number) the angle of the stripes from positive x-axis + @param colours (string[]) the colours to stripe + @param widths (number[], optional) the widths (0.0 to 1.0) of the stripes + @return (object) the stripe definition */ + stripe: function(angle, colours, widths) { + var colourPoints = []; + var avgWidth = Math.round(100 / colours.length) / 100; + for (var i = 0; i < colours.length; i++) { + colourPoints.push([colours[i], (widths ? widths[i] : avgWidth)]); + } + return {angle: angle, striped: true, colorPoints: colourPoints}; + }, + + /* Create a range definition. + @param vertical (boolean, optional) true if vertical, false if horizontal + @param colour (string) the marker's colour + @param start (number) the starting point for the range (0.0 to 1.0) + @param end (number, optional) the ending point for the range (0.0 to 1.0) + @return (object) the range definition */ + range: function(vertical, colour, start, end) { + if (typeof vertical == 'string') { // Optional vertical + end = start; + start = colour; + colour = vertical; + vertical = false; + } + return {vertical: vertical, color: colour, start: start, end: end}; + }, + + /* Create a marker definition. + @param shape (string) the marker shape + @param colour (string) the marker's colour + @param series (number) the series to which the marker applies + @param item (number or string or number[2 or 3], optional) + the item in the series to which it applies or 'all' or + 'everyn' or 'everyn[s:e]' or [start, end, every] + @param size (number, optional) the size (pixels) of the marker or + (string) 'thickness:length' for horizline or vertical + @param priority (string or number, optional) the rendering priority + @param text (string, optional) the display text for a text type marker + @param positioned (boolean, optional) true to absolutely position the marker + @param placement (string or string[], optional) placement locations + @param offsets (number[2], optional) pixel offsets, horizontal and vertical + @return (object) the marker definition */ + marker: function(shape, colour, series, item, size, priority, text, + positioned, placement, offsets) { + if (typeof size == 'boolean') { + offsets = text; + placement = priority; + positioned = size; + text = null; + priority = null; + size = null; + } + if ($.isArray(size)) { + if (typeof size[0] == 'string') { + offsets = priority; + placement = size; + } + else { + offsets = size; + placement = null; + } + positioned = null; + text = null; + priority = null; + size = null; + } + if (typeof priority == 'boolean') { + offsets = positioned; + placement = text; + positioned = priority; + text = null; + priority = null; + } + if ($.isArray(priority)) { + if (typeof priority[0] == 'string') { + offsets = text; + placement = priority; + } + else { + offsets = priority; + placement = null; + } + positioned = null; + text = null; + priority = null; + } + if (typeof text == 'boolean') { + offsets = placement; + placement = positioned; + positioned = text; + text = null; + } + if ($.isArray(text)) { + if (typeof text[0] == 'string') { + offsets = positioned; + placement = text; + } + else { + offsets = text; + placement = null; + } + positioned = null; + text = null; + } + if ($.isArray(positioned)) { + if (typeof positioned[0] == 'string') { + offsets = placement; + placement = positioned; + } + else { + offsets = positioned; + placement = null; + } + positioned = null; + } + if ($.isArray(placement) && typeof placement[0] != 'string') { + offsets = placement; + placement = null; + } + return {shape: shape, color: colour, series: series, + item: (item || item == 0 ? item : -1), size: size || 10, + priority: (priority != null ? priority : 0), text: text, + positioned: positioned, placement: placement, offsets: offsets}; + }, + + /* Create a number format for a marker. + @param type (object) containing all these settings or + (string) 'f' for floating point, 'p' for percentage, + 'e' for scientific notation, 'c' for currency (as specified by CUR) + @param prefix (string, optional) text appearing before the number + @param suffix (string, optional - can only be present if prefix is present) + text appearing after the number + @param precision (number, optional) the number of decimal places + @param showX (boolean, optional) true to show the x-value, false for the y-value + @param zeroes (boolean or number, optional - can only be present if showX is present) + true to display trailing zeroes, number for that many trailing zeroes + @param separators (boolean, optional - can only be present if showX and zeroes are present) + true to display group separators + @return (string) the format definition */ + numberFormat: function(type, prefix, suffix, precision, showX, zeroes, separators) { + var format = initNumberFormat(type, prefix, suffix, precision, showX, zeroes, separators); + return format.prefix + '*' + format.type + format.precision + + (format.zeroes ? (typeof format.zeroes == 'number' ? 'z' + format.zeroes : 'z') : '') + + (format.separators ? 's' : '') + (format.showX ? 'x' : '') + '*' + format.suffix; + }, + + /* Create an axis definition. + @param axis (string) the axis position: top, bottom, left, right + @param lineColour (string, optional) the axis lines' colour + @param labels (string[]) the labels for this axis + @param positions (number[], optional) the positions of the labels + @param rangeStart (number, optional with next two) start of range + @param rangeEnd (number, optional with above) end of range + @param rangeInterval (number, optional with above) interval between values in the range + @param colour (string, optional) the labels' colour + @param alignment (string, optional) the labels' alignment + @param size (number, optional) the labels' size + @param format (object, optional) the labels' number format options + @return (object) the axis definition */ + axis: function(axis, lineColour, labels, positions, rangeStart, + rangeEnd, rangeInterval, colour, alignment, size, format) { + return new GChartAxis(axis, lineColour, labels, positions, rangeStart, + rangeEnd, rangeInterval, colour, alignment, size, format); + }, + + /* Determine the region within a chart. + @param event (MouseEvent) the mouse event contining the cursor position + @param jsonData (object) the JSON description of the chart + @return (object) the current region details (type, series, and point) or null if none */ + findRegion: function(event, jsonData) { + if (!jsonData || !jsonData.chartshape) { + return null; + } + var decodeName = function(name) { + var matches = name.match(/([^\d]+)(\d+)(?:_(\d)+)?/); + return {type: matches[1], series: parseInt(matches[2]), point: parseInt(matches[3] || -1)}; + }; + var offset = $(event.target).offset(); + var x = event.pageX - offset.left; + var y = event.pageY - offset.top; + for (var i = 0; i < jsonData.chartshape.length; i++) { + var shape = jsonData.chartshape[i]; + switch (shape.type) { + case 'RECT': + if (shape.coords[0] <= x && x <= shape.coords[2] && + shape.coords[1] <= y && y <= shape.coords[3]) { + return decodeName(shape.name); + } + break; + case 'CIRCLE': + if (Math.abs(x - shape.coords[0]) <= shape.coords[2] && + Math.abs(y - shape.coords[1]) <= shape.coords[2] && + Math.sqrt(Math.pow(x - shape.coords[0], 2) + + Math.pow(y - shape.coords[1], 2)) <= shape.coords[2]) { + return decodeName(shape.name); + } + break; + case 'POLY': + if ($.gchart._insidePolygon(shape.coords, x, y)) { + return decodeName(shape.name); + } + break; + } + } + return null; + }, + + /* Determine whether a point is within a polygon. + Ray casting algorithm adapted from http://ozviz.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/. + @param coords (number[]) the polygon coords as [x1, y1, x2, y2, ...] + @param x (number) the point's x-coord + @param y (number) the point's y-coord + @return (boolean) true if the point is inside, false if not */ + _insidePolygon: function(coords, x, y) { + var counter = 0; + var p1 = [coords[0], coords[1]]; + for (var i = 2; i <= coords.length; i += 2) { + var p2 = [coords[i % coords.length], coords[i % coords.length + 1]]; + if (y > Math.min(p1[1], p2[1]) && y <= Math.max(p1[1], p2[1])) { + if (x <= Math.max(p1[0], p2[0]) && p1[1] != p2[1]) { + var xinters = (y - p1[1]) * (p2[0] - p1[0]) / (p2[1] - p1[1]) + p1[0]; + if (p1[0] == p2[0] || x <= xinters) { + counter++; + } + } + } + p1 = p2; + } + return (counter % 2 != 0); + }, + + /* Attach the Google chart functionality to a div. + @param target (element) the containing division + @param options (object) the settings for this Google chart instance (optional) */ + _attachGChart: function(target, options) { + target = $(target); + if (target.is('.' + this.markerClassName)) { + return; + } + target.addClass(this.markerClassName); + options = options || {}; + var width = options.width || parseInt(target.css('width'), 10); + var height = options.height || parseInt(target.css('height'), 10); + var allOptions = $.extend({}, this._defaults, options, + {width: width, height: height}); + $.data(target[0], PROP_NAME, allOptions); + this._updateChart(target[0], allOptions); + }, + + /* Reconfigure the settings for a Google charting div. + @param target (element) the containing division + @param name (object) the new settings for this Google chart instance or + (string) the name of a single option + @param value (any, optional) the option's value */ + _changeGChart: function(target, name, value) { + var options = name || {}; + if (typeof name == 'string') { + options = {}; + options[name] = value; + } + var curOptions = $.data(target, PROP_NAME); + extendRemove(curOptions || {}, options); + $.data(target, PROP_NAME, curOptions); + this._updateChart(target, curOptions); + }, + + /* Remove the Google charting functionality from a div. + @param target (element) the containing division */ + _destroyGChart: function(target) { + target = $(target); + if (!target.is('.' + this.markerClassName)) { + return; + } + target.removeClass(this.markerClassName).empty(); + $.removeData(target[0], PROP_NAME); + }, + + /* Generate the Google charting request with the new settings. + @param options (object) the new settings for this Google chart instance + @return (string) the Google chart URL */ + _generateChart: function(options) { + var type = (options.type && options.type.match(/.+:.+/) ? + options.type : this._chartTypes[options.type] || 'p3'); + var labels = ''; + for (var i = 0; i < options.dataLabels.length; i++) { + labels += '|' + encodeURIComponent(options.dataLabels[i] || ''); + } + labels = (labels.length == options.dataLabels.length ? '' : labels); + var format = options.format || 'png'; + var img = (options.secure ? 'https://chart.googleapis.com' : 'http://chart.apis.google.com') + '/chart?' + + this.addSize(type, options) + (format != 'png' ? '&chof=' + format : '') + '&cht=' + type + + this[(this._typeOptions[type.replace(/:.*/, '')] || this._typeOptions['']) + + 'Options'](options, labels); + for (var i = 0; i < this._chartOptions.length; i++) { + img += this['add' + this._chartOptions[i]](type, options); + } + return img; + }, + + /* Optionally include a parameter. + @param name (string) the parameter name + @param value (string) its value + @return (string) name and value, or blank if no value */ + _include: function(name, value) { + return (value ? name + value : ''); + }, + + /* Generate standard options for charts. + @param options (object) the chart settings + @param labels (string) the concatenated labels for the chart + @return (string) the standard chart options */ + standardOptions: function(options, labels) { + var encoding = this['_' + options.encoding + 'Encoding'] || this['_textEncoding']; + return '&chd=' + encoding.apply($.gchart, [options]) + + (labels ? '&chl=' + labels.substr(1) : ''); + }, + + /* Generate standard options for pie charts. + @param options (object) the chart settings + @param labels (string) the concatenated labels for the chart + @return (string) the standard pie chart options */ + pieOptions: function(options, labels) { + return (options.pieOrientation ? '&chp=' + (options.pieOrientation / 180 * Math.PI) : '') + + this.standardOptions(options, labels); + }, + + /* Generate the options for chart size. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart size options */ + addSize: function(type, options) { + var maxSize = 1000; + options.width = Math.max(10, Math.min(options.width, maxSize)); + options.height = Math.max(10, Math.min(options.height, maxSize)); + if (options.width * options.height > 300000) { + options.height = Math.floor(300000 / options.width); + } + return 'chs=' + options.width + 'x' + options.height; + }, + + /* Generate the options for chart margins. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart margin options */ + addMargins: function(type, options) { + var margins = options.margins; + margins = (margins == null ? null : + (typeof margins == 'number' ? [margins, margins, margins, margins] : + (!$.isArray(margins) ? null : + (margins.length == 4 ? margins : + (margins.length == 2 ? [margins[0], margins[0], margins[1], margins[1]] : null))))); + return (!margins ? '' : '&chma=' + margins.join(',') + + (!options.legendDims || options.legendDims.length != 2 ? '' : + '|' + options.legendDims.join(','))); + }, + + /* Generate the options for chart data functions. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart function options */ + addDataFunctions: function(type, options) { + var fns = ''; + for (var i = 0; i < options.functions.length; i++) { + var fn = options.functions[i]; + var data = ''; + fn.data = ($.isArray(fn.data) ? fn.data : [fn.data]); + for (var j = 0; j < fn.data.length; j++) { + var fnVar = fn.data[j]; + data += ';' + fnVar.name + ',' + (fnVar.series != -1 ? fnVar.series : + fnVar.start + ',' + fnVar.end + ',' + fnVar.step); + } + fns += '|' + fn.series + ',' + data.substr(1) + ',' + encodeURIComponent(fn.fnText); + } + return (fns ? '&chfd=' + fns.substr(1) : ''); + }, + + /* Generate the options for bar chart sizings. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the bar chart size options */ + addBarSizings: function(type, options) { + return (type.substr(0, 1) != 'b' ? '' : (options.barWidth == null ? '' : + '&chbh=' + options.barWidth + + (options.barSpacing == null ? '' : ',' + (options.barWidth == $.gchart.barWidthRelative ? + Math.min(Math.max(options.barSpacing, 0.0), 1.0) : options.barSpacing) + + (options.barGroupSpacing == null ? '' : ',' + (options.barWidth == $.gchart.barWidthRelative ? + Math.min(Math.max(options.barGroupSpacing, 0.0), 1.0) : options.barGroupSpacing)))) + + (options.barZeroPoint == null ? '' : '&chp=' + options.barZeroPoint)); + }, + + /* Generate the options for chart line styles. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart line style options */ + addLineStyles: function(type, options) { + if (type.charAt(0) != 'l') { + return ''; + } + var lines = ''; + for (var i = 0; i < options.series.length; i++) { + if (options.series[i].lineThickness && $.isArray(options.series[i].lineSegments)) { + lines += '|' + options.series[i].lineThickness + ',' + + options.series[i].lineSegments.join(','); + } + } + return (lines ? '&chls=' + lines.substr(1) : ''); + }, + + /* Generate the options for chart colours. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart colour options */ + addColours: function(type, options) { + var colours = ''; + var hasColour = false; + for (var i = 0; i < options.series.length; i++) { + var clrs = ''; + if (type != 'lxy' || i % 2 == 0) { + var sep = ','; + $.each(($.isArray(options.series[i].color) ? options.series[i].color : + [options.series[i].color]), function(i, v) { + var colour = $.gchart.color(v || ''); + if (colour) { + hasColour = true; + } + clrs += sep + (colour || '000000'); + sep = '|'; + }); + } + colours += (hasColour ? clrs : ''); + } + return (colours.length > options.series.length ? '&chco=' + colours.substr(1) : ''); + }, + + /* Generate the options for chart title. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart title options */ + addTitle: function(type, options) { + return $.gchart._include('&chtt=', encodeURIComponent(options.title)) + + (options.titleColor || options.titleSize ? + '&chts=' + ($.gchart.color(options.titleColor) || '000000') + ',' + + (options.titleSize || 14) : ''); + }, + + /* Generate the options for chart backgrounds. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart background options */ + addBackgrounds: function(type, options) { + var opacity = (!options.opacity ? null : '000000' + + Math.floor(options.opacity / (options.opacity > 1 ? 100 : 1) * 255).toString(16)); + if (opacity && opacity.length < 8) { + opacity = '0' + opacity; + } + var addBackground = function(area, background) { + if (background == null) { + return ''; + } + if (typeof background == 'string') { + return area + ',s,' + $.gchart.color(background); + } + var bg = area + ',l' + (background.striped ? 's' : 'g') + ',' + + (GRADIENTS[background.angle] != null ? GRADIENTS[background.angle] : background.angle); + for (var i = 0; i < background.colorPoints.length; i++) { + bg += ',' + $.gchart.color(background.colorPoints[i][0]) + + ',' + background.colorPoints[i][1]; + } + return bg; + }; + var backgrounds = addBackground('|a', opacity) + addBackground('|bg', options.backgroundColor) + + addBackground('|c', options.chartColor); + for (var i = 0; i < options.series.length; i++) { + if (options.series[i].fillColor && options.series[i].fillColor.colorPoints) { + backgrounds += addBackground('|b' + i, options.series[i].fillColor); + } + } + return (backgrounds ? '&chf=' + backgrounds.substr(1) : ''); + }, + + /* Generate the options for chart grids. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart grid options */ + addGrids: function(type, options) { + var size = (typeof options.gridSize == 'number' ? + [options.gridSize, options.gridSize] : options.gridSize); + var line = (typeof options.gridLine == 'number' ? + [options.gridLine, options.gridLine] : options.gridLine); + var offsets = (typeof options.gridOffsets == 'number' ? + [options.gridOffsets, options.gridOffsets] : options.gridOffsets); + return (!size ? '' : '&chg=' + size[0] + ',' + size[1] + + (!line ? '' : ',' + line[0] + ',' + line[1] + + (!offsets ? '' : ',' + offsets[0] + ',' + offsets[1]))); + }, + + /* Generate the options for chart legend. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart legend options */ + addLegends: function(type, options) { + var legends = ''; + for (var i = 0; i < options.series.length; i++) { + if (type != 'lxy' || i % 2 == 0) { + legends += '|' + encodeURIComponent(options.series[i].label || ''); + } + } + var order = (options.legendOrder && options.legendOrder.match(/^\d+(,\d+)*$/) ? + options.legendOrder : ORDERS[options.legendOrder]) || ''; + return (!options.legend || + (type != 'lxy' && legends.length <= options.series.length) || + (type == 'lxy' && legends.length <= (options.series.length / 2)) ? '' : + '&chdl=' + legends.substr(1) + $.gchart._include('&chdlp=', + options.legend.charAt(0) + (options.legend.indexOf('V') > -1 ? 'v' : '') + + $.gchart._include('|', order)) + (options.legendColor || options.legendSize ? '&chdls=' + + ($.gchart.color(options.legendColor) || '000000') + ',' + (options.legendSize || 11) : '')); + }, + + /* Generate the options for chart extensions. + @param type (string) the encoded chart type + @param options (object) the chart settings + @return (string) the chart extension options */ + addExtensions: function(type, options) { + var params = ''; + for (var name in options.extension) { + params += '&' + name + '=' + options.extension[name]; + } + return params; + }, + + /* Generate axes parameters. + @param type (string) the encoded chart type + @param options (object) the current instance settings + @return (string) the axes parameters */ + addAxes: function(type, options) { + var axes = ''; + var axesLabels = ''; + var axesPositions = ''; + var axesRanges = ''; + var axesStyles = ''; + var axesTicks = ''; + for (var i = 0; i < options.axes.length; i++) { + if (!options.axes[i]) { + continue; + } + var axisDef = (typeof options.axes[i] == 'string' ? + new GChartAxis(options.axes[i]) : options.axes[i]); + var axis = axisDef.axis().charAt(0); + axes += ',' + (axis == 'b' ? 'x' : (axis == 'l' ? 'y' : axis)); + if (axisDef.labels()) { + var labels = ''; + for (var j = 0; j < axisDef.labels().length; j++) { + labels += '|' + encodeURIComponent(axisDef.labels()[j] || ''); + } + axesLabels += (labels ? '|' + i + ':' + labels : ''); + } + if (axisDef.positions()) { + var positions = ''; + for (var j = 0; j < axisDef.positions().length; j++) { + positions += ',' + axisDef.positions()[j]; + } + axesPositions += (positions ? '|' + i + positions : ''); + } + if (axisDef.range()) { + var range = axisDef.range(); + axesRanges += '|' + i + ',' + range[0] + ',' + range[1] + + (range[2] ? ',' + range[2] : ''); + } + var ticks = axisDef.ticks() || {}; + if (axisDef.color() || axisDef.style() || axisDef.drawing() || ticks.color || axisDef.format()) { + var style = axisDef.style() || {}; + axesStyles += '|' + i + + (axisDef.format() ? 'N' + this.numberFormat(axisDef.format()) : '') + ',' + + $.gchart.color(style.color || 'gray') + ',' + + (style.size || 10) + ',' + + (ALIGNMENTS[style.alignment] || style.alignment || 0) + ',' + + (DRAWING[axisDef.drawing()] || axisDef.drawing() || 'lt') + + (!ticks.color && !axisDef.color() ? '' : + ',' + (ticks.color ? $.gchart.color(ticks.color) : '808080') + + (!axisDef.color() ? '' : ',' + $.gchart.color(axisDef.color()))); + } + if (ticks.length) { + axesTicks += '|' + i + ',' + ($.isArray(ticks.length) ? ticks.length.join(',') : ticks.length); + } + } + return (!axes ? '' : '&chxt=' + axes.substr(1) + + (!axesLabels ? '' : '&chxl=' + axesLabels.substr(1)) + + (!axesPositions ? '' : '&chxp=' + axesPositions.substr(1)) + + (!axesRanges ? '' : '&chxr=' + axesRanges.substr(1)) + + (!axesStyles ? '' : '&chxs=' + axesStyles.substr(1)) + + (!axesTicks ? '' : '&chxtc=' + axesTicks.substr(1))); + }, + + /* Generate markers parameters. + @param type (string) the encoded chart type + @param options (object) the current instance settings + @return (string) the markers parameters */ + addMarkers: function(type, options) { + var markers = ''; + var decodeItem = function(item, positioned) { + if (item == 'all') { + return -1; + } + if (typeof item == 'string') { + var matches = /^every(\d+)(?:\[(\d+):(\d+)\])?$/.exec(item); + if (matches) { + var every = parseInt(matches[1], 10); + return (matches[2] && matches[3] ? + (positioned ? Math.max(0.0, Math.min(1.0, matches[2])) : matches[2]) + ':' + + (positioned ? Math.max(0.0, Math.min(1.0, matches[3])) : matches[3]) + ':' + + every : -every); + } + } + if ($.isArray(item)) { + item = $.map(item, function(v, i) { + return (positioned ? Math.max(0.0, Math.min(1.0, v)) : v); + }); + return item.join(':') + (item.length < 2 ? ':' : ''); + } + return item; + }; + var escapeText = function(value) { + return value.replace(/,/g, '\\,'); + }; + for (var i = 0; i < options.markers.length; i++) { + var marker = options.markers[i]; + var shape = SHAPES[marker.shape] || marker.shape; + var placement = ''; + if (marker.placement) { + var placements = $.makeArray(marker.placement); + for (var j = 0; j < placements.length; j++) { + placement += PLACEMENTS[placements[j]] || ''; + } + } + markers += '|' + (marker.positioned ? '@' : '') + shape + + ('AfNt'.indexOf(shape) > -1 ? escapeText(marker.text || '') : '') + ',' + + $.gchart.color(marker.color) + ',' + + marker.series + ',' + decodeItem(marker.item, marker.positioned) + + ',' + marker.size + ',' + (PRIORITIES[marker.priority] != null ? + PRIORITIES[marker.priority] : marker.priority) + + (placement || marker.offsets ? ',' + placement + + ':' + (marker.offsets && marker.offsets[0] ? marker.offsets[0] : '') + + ':' + (marker.offsets && marker.offsets[1] ? marker.offsets[1] : '') : ''); + } + for (var i = 0; i < options.ranges.length; i++) { + markers += '|' + (options.ranges[i].vertical ? 'R' : 'r') + ',' + + $.gchart.color(options.ranges[i].color) + ',0,' + + options.ranges[i].start + ',' + + (options.ranges[i].end || options.ranges[i].start + 0.005); + } + for (var i = 0; i < options.series.length; i++) { + if (options.series[i].fillColor && !options.series[i].fillColor.colorPoints) { + var fills = ($.isArray(options.series[i].fillColor) ? + options.series[i].fillColor : [options.series[i].fillColor]); + for (var j = 0; j < fills.length; j++) { + if (typeof fills[j] == 'string') { + markers += '|b,' + $.gchart.color(options.series[i].fillColor) + + ',' + i + ',' + (i + 1) + ',0'; + } + else { + var props = ($.isArray(fills[j]) ? fills[j] : [fills[j].color, fills[j].range]); + markers += '|B,' + $.gchart.color(props[0]) + + ',' + i + ',' + props[1] + ',0'; + } + } + } + } + return (markers ? '&chm=' + markers.substr(1) : ''); + }, + + /* Update the Google charting div with the new settings. + @param target (element) the containing division + @param options (object) the new settings for this Google chart instance */ + _updateChart: function(target, options) { + options._src = this._generateChart(options); + if (options.usePost) { + var form = '
      '; + var pattern = /(\w+)=([^&]*)/g; + var match = pattern.exec(options._src); + while (match) { + form += ''; + match = pattern.exec(options._src); + } + form += ''; + target = $(target); + target.empty(); + var ifr = $('').appendTo(target).css({width: '100%', height: '100%'}); + var doc = ifr.contents()[0]; // Write iframe directly + doc.open(); + doc.write(form); + doc.close(); + ifr.show().contents().find('form').submit(); + } + else { + var img = $(new Image()); // Prepare to load chart image in background + img.load(function() { // Once loaded... + $(target).find('img').remove().end().append(this); // Replace + if (options.onLoad) { + if (options.provideJSON) { // Retrieve JSON details + $.getJSON(options._src + '&chof=json&callback=?', + function(data) { + options.onLoad.apply(target, [$.gchart._normaliseRects(data)]); + }); + } + else { + options.onLoad.apply(target, []); + } + } + }); + $(img).attr('src', options._src); + } + }, + + /* Ensure that rectangle coords go from min to max. + @param jsonData (object) the JSON description of the chart + @return (object) the normalised JSON description */ + _normaliseRects: function(jsonData) { + if (jsonData && jsonData.chartshape) { + for (var i = 0; i < jsonData.chartshape.length; i++) { + var shape = jsonData.chartshape[i]; + if (shape.type == 'RECT') { + if (shape.coords[0] > shape.coords[2]) { + var temp = shape.coords[0]; + shape.coords[0] = shape.coords[2]; + shape.coords[2] = temp; + } + if (shape.coords[1] > shape.coords[3]) { + var temp = shape.coords[1]; + shape.coords[1] = shape.coords[3]; + shape.coords[3] = temp; + } + } + } + } + return jsonData; + }, + + /* Encode all series with text encoding. + @param options (object) the settings for this Google chart instance + @return (string) the encoded series data */ + _textEncoding: function(options) { + var minValue = (options.minValue == $.gchart.calculate ? + this._calculateMinValue(options.series) : options.minValue); + var maxValue = (options.maxValue == $.gchart.calculate ? + this._calculateMaxValue(options.series) : options.maxValue); + var data = ''; + for (var i = 0; i < options.series.length; i++) { + data += '|' + this._textEncode(options.series[i], minValue, maxValue); + } + return 't' + (options.visibleSeries || '') + ':' + data.substr(1); + }, + + /* Encode values in text format: numeric 0.0 to 100.0, comma separated, -1 for null + @param series (object) details about the data values to encode + @param minValue (number) the minimum possible data value + @param maxValue (number) the maximum possible data value + @return (string) the encoded data values */ + _textEncode: function(series, minValue, maxValue) { + minValue = (series.minValue != null ? series.minValue : minValue); + maxValue = (series.maxValue != null ? series.maxValue : maxValue); + var factor = 100 / (maxValue - minValue); + var data = ''; + for (var i = 0; i < series.data.length; i++) { + data += ',' + (series.data[i] == null || isNaN(series.data[i]) ? '-1' : + Math.round(factor * (series.data[i] - minValue) * 100) / 100); + } + return data.substr(1); + }, + + /* Encode all series with scaled text encoding. + @param options (object) the settings for this Google chart instance + @return (string) the encoded series data */ + _scaledEncoding: function(options) { + var minValue = (options.minValue == $.gchart.calculate ? + this._calculateMinValue(options.series) : options.minValue); + var maxValue = (options.maxValue == $.gchart.calculate ? + this._calculateMaxValue(options.series) : options.maxValue); + var data = ''; + var minMax = ''; + for (var i = 0; i < options.series.length; i++) { + data += '|' + this._scaledEncode(options.series[i], minValue); + minMax += ',' + (options.series[i].minValue != null ? + options.series[i].minValue : minValue) + + ',' + (options.series[i].maxValue != null ? + options.series[i].maxValue : maxValue); + } + return 't' + (options.visibleSeries || '') + ':' + data.substr(1) + + '&chds=' + minMax.substr(1); + }, + + /* Encode values in text format: numeric min to max, comma separated, min - 1 for null + @param series (object) details about the data values to encode + @param minValue (number) the minimum possible data value + @return (string) the encoded data values */ + _scaledEncode: function(series, minValue) { + minValue = (series.minValue != null ? series.minValue : minValue); + var data = ''; + for (var i = 0; i < series.data.length; i++) { + data += ',' + (series.data[i] == null || isNaN(series.data[i]) ? + (minValue - 1) : series.data[i]); + } + return data.substr(1); + }, + + /* Encode all series with simple encoding. + @param options (object) the settings for this Google chart instance + @return (string) the encoded series data */ + _simpleEncoding: function(options) { + var minValue = (options.minValue == $.gchart.calculate ? + this._calculateMinValue(options.series) : options.minValue); + var maxValue = (options.maxValue == $.gchart.calculate ? + this._calculateMaxValue(options.series) : options.maxValue); + var data = ''; + for (var i = 0; i < options.series.length; i++) { + data += ',' + this._simpleEncode(options.series[i], minValue, maxValue); + } + return 's' + (options.visibleSeries || '') + ':' + data.substr(1); + }, + + /* Encode values in simple format: single character, + banded-62 as A-Za-z0-9, _ for null. + @param series (object) details about the data values to encode + @param minValue (number) the minimum possible data value + @param maxValue (number) the maximum possible data value + @return (string) the encoded data values */ + _simpleEncode: function(series, minValue, maxValue) { + minValue = (series.minValue != null ? series.minValue : minValue); + maxValue = (series.maxValue != null ? series.maxValue : maxValue); + var factor = 61 / (maxValue - minValue); + var data = ''; + for (var i = 0; i < series.data.length; i++) { + data += (series.data[i] == null || isNaN(series.data[i]) ? '_' : + SIMPLE_ENCODING.charAt(Math.round(factor * (series.data[i] - minValue)))); + } + return data; + }, + + /* Encode all series with extended encoding. + @param options (object) the settings for this Google chart instance + @return (string) the encoded series data */ + _extendedEncoding: function(options) { + var minValue = (options.minValue == $.gchart.calculate ? + this._calculateMinValue(options.series) : options.minValue); + var maxValue = (options.maxValue == $.gchart.calculate ? + this._calculateMaxValue(options.series) : options.maxValue); + var data = ''; + for (var i = 0; i < options.series.length; i++) { + data += ',' + this._extendedEncode(options.series[i], minValue, maxValue); + } + return 'e' + (options.visibleSeries || '') + ':' + data.substr(1); + }, + + /* Encode values in extended format: double character, + banded-4096 as A-Za-z0-9-., __ for null. + @param series (object) details about the data values to encode + @param minValue (number) the minimum possible data value + @param maxValue (number) the maximum possible data value + @return (string) the encoded data values */ + _extendedEncode: function(series, minValue, maxValue) { + minValue = (series.minValue != null ? series.minValue : minValue); + maxValue = (series.maxValue != null ? series.maxValue : maxValue); + var factor = 4095 / (maxValue - minValue); + var encode = function(value) { + return EXTENDED_ENCODING.charAt(value / 64) + + EXTENDED_ENCODING.charAt(value % 64); + }; + var data = ''; + for (var i = 0; i < series.data.length; i++) { + data += (series.data[i] == null || isNaN(series.data[i]) ? '__' : + encode(Math.round(factor * (series.data[i] - minValue)))); + } + return data; + }, + + /* Determine the minimum value amongst the data values. + @param series (object[]) the series to examine + @return (number) the minimum value therein */ + _calculateMinValue: function(series) { + var minValue = 99999999; + for (var i = 0; i < series.length; i++) { + var data = series[i].data; + for (var j = 0; j < data.length; j++) { + minValue = Math.min(minValue, (data[j] == null ? 99999999 : data[j])); + } + } + return minValue; + }, + + /* Determine the maximum value amongst the data values. + @param series (object[]) the series to examine + @return (number) the maximum value therein */ + _calculateMaxValue: function(series) { + var maxValue = -99999999; + for (var i = 0; i < series.length; i++) { + var data = series[i].data; + for (var j = 0; j < data.length; j++) { + maxValue = Math.max(maxValue, (data[j] == null ? -99999999 : data[j])); + } + } + return maxValue; + } +}); + +/* The definition of a chart axis. + @param axis (string) the axis position: top, bottom, left, right + @param lineColour (string, optional) the axis lines' colour + @param labels (string[]) the labels for this axis + @param positions (number[], optional) the positions of the labels + @param rangeStart (number, optional with next two) start of range + @param rangeEnd (number, optional with above) end of range + @param rangeInterval (number, optional with above) interval between values in the range + @param colour (string, optional) the labels' colour + @param alignment (string, optional) the labels' alignment + @param size (number, optional) the labels' size + @param format (object, optional) the labels' number format options */ +function GChartAxis(axis, lineColour, labels, positions, rangeStart, rangeEnd, rangeInterval, + colour, alignment, size, format) { + if (typeof lineColour != 'string') { // Optional lineColour + format = size; + size = alignment; + alignment = colour; + colour = rangeInterval; + rangeInterval = rangeEnd; + rangeEnd = rangeStart; + rangeStart = positions; + positions = labels; + labels = lineColour; + lineColour = null; + } + if (typeof labels == 'number') { // Range instead of labels/positions + format = alignment; + size = colour; + alignment = rangeInterval; + colour = rangeEnd; + rangeInterval = rangeStart; + rangeEnd = positions; + rangeStart = labels; + positions = null; + labels = null; + } + else if (!$.isArray(positions)) { // Optional positions + format = size; + size = alignment; + alignment = colour; + colour = rangeInterval; + rangeInterval = rangeEnd; + rangeEnd = rangeStart; + rangeStart = positions; + positions = null; + } + if (typeof rangeStart == 'string') { // Optional rangeStart/rangeEnd/rangeInterval + format = colour; + size = rangeInterval; + alignment = rangeEnd; + colour = rangeStart; + rangeInterval = null; + rangeEnd = null; + rangeStart = null; + } + if (typeof rangeInterval == 'string') { // Optional rangeInterval + format = size; + size = alignment; + alignment = colour; + colour = rangeInterval; + rangeInterval = null; + } + if (typeof alignment == 'number') { // Optional alignment + format = size; + size = alignment; + alignment = null; + } + this._axis = axis; + this._lineColor = lineColour; + this._labels = labels; + this._positions = positions; + this._range = (rangeStart != null ? [rangeStart, rangeEnd, rangeInterval || null] : null); + this._color = colour; + this._alignment = alignment; + this._size = size; + this._drawing = null; + this._tickColor = null; + this._tickLength = null; + this._format = format; +} + +$.extend(GChartAxis.prototype, { + + /* Get/set the axis position. + @param axis (string) the axis position: top, bottom, left, right + @return (GChartAxis) the axis object or + (string) the axis position (if no parameters specified) */ + axis: function(axis) { + if (arguments.length == 0) { + return this._axis; + } + this._axis = axis; + return this; + }, + + /* Get/set the axis colour. + @param lineColour (string) the axis line colour + @return (GChartAxis) the axis object or + (string) the axis line colour (if no parameters specified) */ + color: function(lineColour) { + if (arguments.length == 0) { + return this._lineColor; + } + this._lineColor = lineColour; + return this; + }, + + /* Get/set the axis labels. + @param labels (string[]) the labels for this axis + @return (GChartAxis) the axis object or + (string[]) the axis labels (if no parameters specified) */ + labels: function(labels) { + if (arguments.length == 0) { + return this._labels; + } + this._labels = labels; + return this; + }, + + /* Get/set the axis label positions. + @param positions (number[]) the positions of the labels + @return (GChartAxis) the axis object or + (number[]) the axis label positions (if no parameters specified) */ + positions: function(positions) { + if (arguments.length == 0) { + return this._positions; + } + this._positions = positions; + return this; + }, + + /* Get/set the axis range. + @param rangeStart (number) start of range + @param rangeEnd (number) end of range + @param rangeInterval (number, optional) interval between values in the range + @return (GChartAxis) the axis object or + (number[3]) the axis range start, end, and interval (if no parameters specified) */ + range: function(start, end, interval) { + if (arguments.length == 0) { + return this._range; + } + this._range = [start, end, interval || null]; + return this; + }, + + /* Get/set the axis labels' style. + @param colour (string) the labels' colour + @param alignment (string, optional) the labels' alignment + @param size (number, optional) the labels' size + @return (GChartAxis) the axis object or + (object) the axis style with attributes color, alignment, and size + (if no parameters specified) */ + style: function(colour, alignment, size) { + if (arguments.length == 0) { + return (!this._color && !this._alignment && !this._size ? null : + {color: this._color, alignment: this._alignment, size: this._size}); + } + this._color = colour; + this._alignment = alignment; + this._size = size; + return this; + }, + + /* Get/set the axis drawing control. + @param drawing (string) the drawing control: line, ticks, both + @return (GChartAxis) the axis object or + (string) the axis drawing control (if no parameters specified) */ + drawing: function(drawing) { + if (arguments.length == 0) { + return this._drawing; + } + this._drawing = drawing; + return this; + }, + + /* Get/set the axis tick style. + @param colour (string) the colour of the tick marks + @param length (number, optional) the length of the tick marks, + negative values draw inside the chart or + (string, optional) list of lengths, comma-separated + @return (GChartAxis) the axis object or + (object) the axis tick style with attributes color and length + (if no parameters specified) */ + ticks: function(colour, length) { + if (arguments.length == 0) { + return (!this._tickColor && !this._tickLength ? null : + {color: this._tickColor, length: this._tickLength}); + } + this._tickColor = colour; + this._tickLength = length; + return this; + }, + + /* Get/set the number format for the axis. + @param type (object) containing all these settings or + (string) 'f' for floating point, 'p' for percentage, + 'e' for scientific notation, 'c' for currency (as specified by CUR) + @param prefix (string, optional) text appearing before the number + @param suffix (string, optional - can only be present if prefix is present) + text appearing after the number + @param precision (number, optional) the number of decimal places + @param showX (boolean, optional) true to show the x-value, false for the y-value + @param zeroes (boolean or number, optional - can only be present if showX is present) + true to display trailing zeroes, number for that many trailing zeroes + @param separators (boolean, optional - can only be present if showX and zeroes are present) + true to display group separators + @return (GChartAxis) the axis object or + (object) the axis format (if no parameters specified) */ + format: function(type, prefix, suffix, precision, showX, zeroes, separators) { + if (arguments.length == 0) { + return this._format; + } + this._format = initNumberFormat(type, prefix, suffix, precision, showX, zeroes, separators); + return this; + } +}); + +/* Initialise a number format specification. */ +function initNumberFormat(type, prefix, suffix, precision, showX, zeroes, separators) { + if (typeof type == 'object') { + return type; + } + if (typeof prefix == 'number') { + separators = showX; + zeroes = precision; + showX = suffix; + precision = prefix; + suffix = ''; + prefix = ''; + } + if (typeof prefix == 'boolean') { + separators = precision; + zeroes = suffix; + showX = prefix; + precision = 0; + suffix = ''; + prefix = ''; + } + if (typeof suffix == 'number') { + separators = zeroes; + zeroes = showX; + showX = precision; + precision = suffix; + suffix = ''; + } + if (typeof suffix == 'boolean') { + separators = showX; + zeroes = precision; + showX = suffix; + precision = 0; + suffix = ''; + } + if (typeof precision == 'boolean') { + separators = zeroes; + zeroes = showX; + showX = precision; + precision = 0; + } + return {type: type, prefix: prefix || '', suffix: suffix || '', precision: precision || '', + showX: showX || false, zeroes: zeroes || false, separators: separators || false}; +} + +/* jQuery extend now ignores nulls! + @param target (object) the object to extend + @param props (object) the new attributes to add + @return (object) the updated object */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) { + if (props[name] == null) { + target[name] = null; + } + } + return target; +} + +/* Attach the Google chart functionality to a jQuery selection. + @param command (string) the command to run (optional, default 'attach') + @param options (object) the new settings to use for these Google chart instances + @return (jQuery object) for chaining further calls */ +$.fn.gchart = function(options) { + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (options == 'current') { + return $.gchart['_' + options + 'GChart']. + apply($.gchart, [this[0]].concat(otherArgs)); + } + return this.each(function() { + if (typeof options == 'string') { + $.gchart['_' + options + 'GChart']. + apply($.gchart, [this].concat(otherArgs)); + } + else { + $.gchart._attachGChart(this, options); + } + }); +}; + +/* Initialise the Google chart functionality. */ +$.gchart = new GChart(); // singleton instance + +})(jQuery); diff --git a/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.min.js b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.min.js new file mode 100644 index 0000000..95d737d --- /dev/null +++ b/book/modules/luther/sphinx/animation/jqchart/jquery.gchart.min.js @@ -0,0 +1,8 @@ +/* http://keith-wood.name/gChart.html + Google Chart interface for jQuery v1.4.3. + See API details at http://code.google.com/apis/chart/. + Written by Keith Wood (kbwood{at}iinet.com.au) September 2008. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +(function($){function GChart(){this._defaults={width:0,height:0,format:'png',usePost:false,secure:false,margins:null,title:'',titleColor:'',titleSize:0,opacity:0,backgroundColor:null,chartColor:null,legend:'',legendOrder:'normal',legendDims:null,legendColor:'',legendSize:0,type:'pie3D',encoding:'',series:[this.series('Hello World',[60,40])],visibleSeries:0,functions:[],dataLabels:[],axes:[],ranges:[],markers:[],minValue:0,maxValue:100,gridSize:null,gridLine:null,gridOffsets:null,extension:{},barWidth:null,barSpacing:null,barGroupSpacing:null,barZeroPoint:null,pieOrientation:0,onLoad:null,provideJSON:false};this._typeOptions={'':'standard',p:'pie',p3:'pie',pc:'pie'};this._chartOptions=['Margins','DataFunctions','BarSizings','LineStyles','Colours','Title','Axes','Backgrounds','Grids','Markers','Legends','Extensions'];this._chartTypes={line:'lc',lineXY:'lxy',sparkline:'ls',barHoriz:'bhs',barVert:'bvs',barHorizGrouped:'bhg',barVertGrouped:'bvg',barHorizOverlapped:'bho',barVertOverlapped:'bvo',pie:'p',pie3D:'p3',pieConcentric:'pc',radar:'r',radarCurved:'rs',lc:'lc',lxy:'lxy',ls:'ls',bhs:'bhs',bvs:'bvs',bhg:'bhg',bvg:'bvg',bho:'bho',bvo:'bvo',p:'p',p3:'p3',pc:'pc',r:'r',rs:'rs'}};var s='gChart';var t={aqua:'008080',black:'000000',blue:'0000ff',fuchsia:'ff00ff',gray:'808080',green:'008000',grey:'808080',lime:'00ff00',maroon:'800000',navy:'000080',olive:'808000',orange:'ffa500',purple:'800080',red:'ff0000',silver:'c0c0c0',teal:'008080',transparent:'00000000',white:'ffffff',yellow:'ffff00'};var u={annotation:'A',arrow:'a',candlestick:'F',circle:'o',cross:'x',diamond:'d',down:'v',errorbar:'E',flag:'f',financial:'F',horizbar:'H',horizontal:'h',number:'N',plus:'c',rectangle:'C',sparkfill:'B',sparkline:'D',sparkslice:'b',square:'s',text:'t',vertical:'V'};var w={behind:-1,below:-1,normal:0,above:+1,inFront:+1,'-':-1,'+':+1};var z={diagonalDown:-45,diagonalUp:45,horizontal:0,vertical:90,dd:-45,du:45,h:0,v:90};var A={left:-1,center:0,centre:0,right:+1,l:-1,c:0,r:+1};var B={line:'l',ticks:'t',both:'lt'};var C={normal:'l',reverse:'r',automatic:'a','':'',l:'l',r:'r',a:'a'};var D={barbase:'s',barcenter:'c',barcentre:'c',bartop:'e',bottom:'b',center:'h',centre:'h',left:'l',middle:'v',right:'r',top:'t',b:'b',c:'c',e:'e',h:'h',l:'l',r:'r',s:'s',t:'t',v:'v'};var E='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';var F='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';$.extend(GChart.prototype,{_prototype:GChart,markerClassName:'hasGChart',calculate:-0.123456,barWidthAuto:'a',barWidthRelative:'r',formatFloat:'f',formatPercent:'p',formatScientific:'e',formatCurrency:'c',setDefaults:function(a){extendRemove(this._defaults,a||{})},series:function(a,b,c,d,e,f,g,h){if($.isArray(a)){h=g;g=f;f=e;e=d;d=c;c=b;b=a;a=''}if(typeof c=='number'){h=f;g=e;f=d;e=c;d=null;c=null}if(typeof d=='number'){h=g;g=f;f=e;e=d;d=null}if($.isArray(f)){h=f;g=e;f=null;e=null}return{label:a,data:b||[],color:c||'',fillColor:d,minValue:e,maxValue:f,lineThickness:g,lineSegments:h}},seriesFromCsv:function(h){var j=[];if(!$.isArray(h)){h=h.split('\n')}if(!h.length){return j}var k=false;var l=[];var m=[];var n=['label','color','fillColor','minValue','maxValue','lineThickness','lineSegmentLine','lineSegmentGap'];$.each(h,function(i,c){var d=c.split(',');if(i==0&&isNaN(parseFloat(d[0]))){$.each(d,function(i,a){if($.inArray(a,n)>-1){l[i]=a}else if(a.match(/^x\d+$/)){m[i]=a}})}else{var e={};var f=[];var g=null;$.each(d,function(i,a){if(l[i]){var b=$.inArray(l[i],n);e[l[i]]=(b>2?$.gchart._numeric(a,0):a)}else if(m[i]){g=(a?$.gchart._numeric(a,-1):null);k=true}else{var y=$.gchart._numeric(a,-1);f.push(g!=null?[g,y]:y);g=null}});if(e.lineSegmentLine!=null&&e.lineSegmentGap!=null){e.lineSegments=[e.lineSegmentLine,e.lineSegmentGap];e.lineSegmentLine=e.lineSegmentGap=null}j.push($.extend(e,{data:f}))}});return(k?this.seriesForXYLines(j):j)},seriesFromXml:function(f){if($.browser.msie&&typeof f=='string'){var g=new ActiveXObject('Microsoft.XMLDOM');g.validateOnParse=false;g.resolveExternals=false;g.loadXML(f);f=g}f=$(f);var h=[];var j=false;try{f.find('series').each(function(){var b=$(this);var c=[];b.find('point').each(function(){var a=$(this);var x=a.attr('x');if(x!=null){j=true;x=$.gchart._numeric(x,-1)}y=$.gchart._numeric(a.attr('y'),-1);c.push(x?[x,y]:y)});var d=b.attr('lineSegments');if(d){d=d.split(',');for(var i=0;i255)){throw'Value out of range (0-255) '+a;}};var d=function(a){return(a.length==1?'0':'')+a};if(typeof r=='string'){c(g);return(r.match(/^#([A-Fa-f0-9]{2}){3,4}$/)?r.substring(1):(t[r]||r)+(g?d(g.toString(16)):''))}c(r);c(g);c(b);c(a);return d(r.toString(16))+d(g.toString(16))+d(b.toString(16))+(a?d(a.toString(16)):'')},gradient:function(a,b,c){var d=[];if($.isArray(b)){var e=1/(b.length-1);for(var i=0;iMath.min(c[1],d[1])&&y<=Math.max(c[1],d[1])){if(x<=Math.max(c[0],d[0])&&c[1]!=d[1]){var e=(y-c[1])*(d[0]-c[0])/(d[1]-c[1])+c[0];if(c[0]==d[0]||x<=e){b++}}}c=d}return(b%2!=0)},_attachGChart:function(a,b){a=$(a);if(a.is('.'+this.markerClassName)){return}a.addClass(this.markerClassName);b=b||{};var c=b.width||parseInt(a.css('width'),10);var d=b.height||parseInt(a.css('height'),10);var e=$.extend({},this._defaults,b,{width:c,height:d});$.data(a[0],s,e);this._updateChart(a[0],e)},_changeGChart:function(a,b,c){var d=b||{};if(typeof b=='string'){d={};d[b]=c}var e=$.data(a,s);extendRemove(e||{},d);$.data(a,s,e);this._updateChart(a,e)},_destroyGChart:function(a){a=$(a);if(!a.is('.'+this.markerClassName)){return}a.removeClass(this.markerClassName).empty();$.removeData(a[0],s)},_generateChart:function(a){var b=(a.type&&a.type.match(/.+:.+/)?a.type:this._chartTypes[a.type]||'p3');var c='';for(var i=0;i300000){b.height=Math.floor(300000/b.width)}return'chs='+b.width+'x'+b.height},addMargins:function(a,b){var c=b.margins;c=(c==null?null:(typeof c=='number'?[c,c,c,c]:(!$.isArray(c)?null:(c.length==4?c:(c.length==2?[c[0],c[0],c[1],c[1]]:null)))));return(!c?'':'&chma='+c.join(',')+(!b.legendDims||b.legendDims.length!=2?'':'|'+b.legendDims.join(',')))},addDataFunctions:function(a,b){var c='';for(var i=0;ic.series.length?'&chco='+d.substr(1):'')},addTitle:function(a,b){return $.gchart._include('&chtt=',encodeURIComponent(b.title))+(b.titleColor||b.titleSize?'&chts='+($.gchart.color(b.titleColor)||'000000')+','+(b.titleSize||14):'')},addBackgrounds:function(d,e){var f=(!e.opacity?null:'000000'+Math.floor(e.opacity/(e.opacity>1?100:1)*255).toString(16));if(f&&f.length<8){f='0'+f}var g=function(a,b){if(b==null){return''}if(typeof b=='string'){return a+',s,'+$.gchart.color(b)}var c=a+',l'+(b.striped?'s':'g')+','+(z[b.angle]!=null?z[b.angle]:b.angle);for(var i=0;i-1?'v':'')+$.gchart._include('|',d))+(b.legendColor||b.legendSize?'&chdls='+($.gchart.color(b.legendColor)||'000000')+','+(b.legendSize||11):''))},addExtensions:function(a,b){var c='';for(var d in b.extension){c+='&'+d+'='+b.extension[d]}return c},addAxes:function(a,b){var c='';var d='';var e='';var f='';var g='';var h='';for(var i=0;i-1?k(l.text||''):'')+','+$.gchart.color(l.color)+','+l.series+','+h(l.item,l.positioned)+','+l.size+','+(w[l.priority]!=null?w[l.priority]:l.priority)+(n||l.offsets?','+n+':'+(l.offsets&&l.offsets[0]?l.offsets[0]:'')+':'+(l.offsets&&l.offsets[1]?l.offsets[1]:''):'')}for(var i=0;i';var e=/(\w+)=([^&]*)/g;var f=e.exec(c._src);while(f){d+='';f=e.exec(c._src)}d+='';b=$(b);b.empty();var g=$('').appendTo(b).css({width:'100%',height:'100%'});var h=g.contents()[0];h.open();h.write(d);h.close();g.show().contents().find('form').submit()}else{var i=$(new Image());i.load(function(){$(b).find('img').remove().end().append(this);if(c.onLoad){if(c.provideJSON){$.getJSON(c._src+'&chof=json&callback=?',function(a){c.onLoad.apply(b,[$.gchart._normaliseRects(a)])})}else{c.onLoad.apply(b,[])}}});$(i).attr('src',c._src)}},_normaliseRects:function(a){if(a&&a.chartshape){for(var i=0;ib.coords[2]){var c=b.coords[0];b.coords[0]=b.coords[2];b.coords[2]=c}if(b.coords[1]>b.coords[3]){var c=b.coords[1];b.coords[1]=b.coords[3];b.coords[3]=c}}}}return a},_textEncoding:function(a){var b=(a.minValue==$.gchart.calculate?this._calculateMinValue(a.series):a.minValue);var c=(a.maxValue==$.gchart.calculate?this._calculateMaxValue(a.series):a.maxValue);var d='';for(var i=0;i35?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}('(J($){J 1r(){7.2v={1c:0,1d:0,1s:\'2w\',3o:18,2x:18,3p:6,3q:\'\',2y:\'\',2z:0,21:0,3r:6,3s:6,22:\'\',1D:\'2A\',23:6,2B:\'\',2C:0,19:\'3t\',3u:\'\',L:[7.L(\'4x 4y\',[60,40])],1E:0,2D:[],24:[],1t:[],1n:[],2E:[],U:0,X:1a,1F:6,1G:6,1H:6,2F:{},1I:6,25:6,26:6,2G:6,2H:0,27:6,3v:18};7.2I={\'\':\'4z\',p:\'28\',1J:\'28\',29:\'28\'};7.2J=[\'4A\',\'4B\',\'4C\',\'4D\',\'4E\',\'4F\',\'4G\',\'4H\',\'4I\',\'4J\',\'4K\',\'4L\'];7.3w={3x:\'2K\',4M:\'1o\',3y:\'2L\',4N:\'2M\',4O:\'2N\',4P:\'2O\',4Q:\'2P\',4R:\'2Q\',4S:\'2R\',28:\'p\',3t:\'1J\',4T:\'29\',4U:\'r\',4V:\'2S\',2K:\'2K\',1o:\'1o\',2L:\'2L\',2M:\'2M\',2N:\'2N\',2O:\'2O\',2P:\'2P\',2Q:\'2Q\',2R:\'2R\',p:\'p\',1J:\'1J\',29:\'29\',r:\'r\',2S:\'2S\'}};5 s=\'4W\';5 t={4X:\'3z\',4Y:\'1K\',4Z:\'50\',51:\'52\',3A:\'2T\',53:\'54\',55:\'2T\',56:\'57\',58:\'59\',5a:\'5b\',5c:\'5d\',5e:\'5f\',5g:\'5h\',5i:\'5j\',5k:\'5l\',5m:\'3z\',5n:\'5o\',5p:\'5q\',5r:\'5s\'};5 u={5t:\'A\',5u:\'a\',5v:\'F\',5w:\'o\',5x:\'x\',5y:\'d\',5z:\'v\',5A:\'E\',5B:\'f\',5C:\'F\',5D:\'H\',3B:\'h\',17:\'N\',5E:\'c\',5F:\'C\',5G:\'B\',3y:\'D\',5H:\'b\',5I:\'s\',2U:\'t\',2a:\'V\'};5 w={5J:-1,5K:-1,2A:0,5L:+1,5M:+1,\'-\':-1,\'+\':+1};5 z={5N:-45,5O:45,3B:0,2a:3C,5P:-45,5Q:45,h:0,v:3C};5 A={2V:-1,3D:0,3E:0,3F:+1,l:-1,c:0,r:+1};5 B={3x:\'l\',2W:\'t\',5R:\'3G\'};5 C={2A:\'l\',5S:\'r\',5T:\'a\',\'\':\'\',l:\'l\',r:\'r\',a:\'a\'};5 D={5U:\'s\',5V:\'c\',5W:\'c\',5X:\'e\',5Y:\'b\',3D:\'h\',3E:\'h\',2V:\'l\',5Z:\'v\',3F:\'r\',3H:\'t\',b:\'b\',c:\'c\',e:\'e\',h:\'h\',l:\'l\',r:\'r\',s:\'s\',t:\'t\',v:\'v\'};5 E=\'3I\';5 F=\'3I-.\';$.1L(1r.2X,{62:1r,1M:\'63\',1i:-0.65,66:\'a\',2Y:\'r\',67:\'f\',68:\'p\',69:\'e\',6a:\'c\',6b:J(a){2Z(7.2v,a||{})},L:J(a,b,c,d,e,f,g,h){G($.12(a)){h=g;g=f;f=e;e=d;d=c;c=b;b=a;a=\'\'}G(O c==\'17\'){h=f;g=e;f=d;e=c;d=6;c=6}G(O d==\'17\'){h=g;g=f;f=e;e=d;d=6}G($.12(f)){h=f;g=e;f=6;e=6}I{1u:a,S:b||[],Q:c||\'\',13:d,U:e,X:f,1k:g,1l:h}},6c:J(h){5 j=[];G(!$.12(h)){h=h.30(\'\\n\')}G(!h.K){I j}5 k=18;5 l=[];5 m=[];5 n=[\'1u\',\'Q\',\'13\',\'U\',\'X\',\'1k\',\'2b\',\'2c\'];$.1p(h,J(i,c){5 d=c.30(\',\');G(i==0&&1v(3J(d[0]))){$.1p(d,J(i,a){G($.31(a,n)>-1){l[i]=a}15 G(a.1N(/^x\\d+$/)){m[i]=a}})}15{5 e={};5 f=[];5 g=6;$.1p(d,J(i,a){G(l[i]){5 b=$.31(l[i],n);e[l[i]]=(b>2?$.M.1e(a,0):a)}15 G(m[i]){g=(a?$.M.1e(a,-1):6);k=2d}15{5 y=$.M.1e(a,-1);f.1b(g!=6?[g,y]:y);g=6}});G(e.2b!=6&&e.2c!=6){e.1l=[e.2b,e.2c];e.2b=e.2c=6}j.1b($.1L(e,{S:f}))}});I(k?7.2e(j):j)},6d:J(f){G($.6e.6f&&O f==\'Z\'){5 g=1O 6g(\'6h.6i\');g.6j=18;g.6k=18;g.6l(f);f=g}f=$(f);5 h=[];5 j=18;6m{f.2f(\'L\').1p(J(){5 b=$(7);5 c=[];b.2f(\'3K\').1p(J(){5 a=$(7);5 x=a.1f(\'x\');G(x!=6){j=2d;x=$.M.1e(x,-1)}y=$.M.1e(a.1f(\'y\'),-1);c.1b(x?[x,y]:y)});5 d=b.1f(\'1l\');G(d){d=d.30(\',\');P(5 i=0;i32)){6p\'6q 6r 6s 1x (0-32) \'+a;}};5 d=J(a){I(a.K==1?\'0\':\'\')+a};G(O r==\'Z\'){c(g);I(r.1N(/^#([A-6t-6u-9]{2}){3,4}$/)?r.6v(1):(t[r]||r)+(g?d(g.1y(16)):\'\'))}c(r);c(g);c(b);c(a);I d(r.1y(16))+d(g.1y(16))+d(b.1y(16))+(a?d(a.1y(16)):\'\')},6w:J(a,b,c){5 d=[];G($.12(b)){5 e=1/(b.K-1);P(5 i=0;iT.1j(c[1],d[1])&&y<=T.1g(c[1],d[1])){G(x<=T.1g(c[0],d[0])&&c[1]!=d[1]){5 e=(y-c[1])*(d[0]-c[0])/(d[1]-c[1])+c[0];G(c[0]==d[0]||x<=e){b++}}}c=d}I(b%2!=0)},42:J(a,b){a=$(a);G(a.43(\'.\'+7.1M)){I}a.6I(7.1M);b=b||{};5 c=b.1c||1U(a.3a(\'1c\'),10);5 d=b.1d||1U(a.3a(\'1d\'),10);5 e=$.1L({},7.2v,b,{1c:c,1d:d});$.S(a[0],s,e);7.3b(a[0],e)},6J:J(a,b,c){5 d=b||{};G(O b==\'Z\'){d={};d[b]=c}5 e=$.S(a,s);2Z(e||{},d);$.S(a,s,e);7.3b(a,e)},6K:J(a){a=$(a);G(!a.43(\'.\'+7.1M)){I}a.6L(7.1M).44();$.6M(a[0],s)},46:J(a){5 b=(a.19&&a.19.1N(/.+:.+/)?a.19:7.3w[a.19]||\'1J\');5 c=\'\';P(5 i=0;i4j){b.1d=T.3c(4j/b.1c)}I\'6W=\'+b.1c+\'x\'+b.1d},6X:J(a,b){5 c=b.3p;c=(c==6?6:(O c==\'17\'?[c,c,c,c]:(!$.12(c)?6:(c.K==4?c:(c.K==2?[c[0],c[0],c[1],c[1]]:6)))));I(!c?\'\':\'&6Y=\'+c.1X(\',\')+(!b.23||b.23.K!=2?\'\':\'|\'+b.23.1X(\',\')))},6Z:J(a,b){5 c=\'\';P(5 i=0;ic.L.K?\'&76=\'+d.Y(1):\'\')},77:J(a,b){I $.M.2l(\'&4k=\',1V(b.3q))+(b.2y||b.2z?\'&78=\'+($.M.Q(b.2y)||\'1K\')+\',\'+(b.2z||14):\'\')},79:J(d,e){5 f=(!e.21?6:\'1K\'+T.3c(e.21/(e.21>1?1a:1)*32).1y(16));G(f&&f.K<8){f=\'0\'+f}5 g=J(a,b){G(b==6){I\'\'}G(O b==\'Z\'){I a+\',s,\'+$.M.Q(b)}5 c=a+\',l\'+(b.3P?\'s\':\'g\')+\',\'+(z[b.1S]!=6?z[b.1S]:b.1S);P(5 i=0;i-1?\'v\':\'\')+$.M.2l(\'|\',d))+(b.2B||b.2C?\'&7g=\'+($.M.Q(b.2B)||\'1K\')+\',\'+(b.2C||11):\'\'))},7h:J(a,b){5 c=\'\';P(5 d 4n b.2F){c+=\'&\'+d+\'=\'+b.2F[d]}I c},7i:J(a,b){5 c=\'\';5 d=\'\';5 e=\'\';5 f=\'\';5 g=\'\';5 h=\'\';P(5 i=0;i-1?k(l.2U||\'\'):\'\')+\',\'+$.M.Q(l.Q)+\',\'+l.L+\',\'+h(l.3Q,l.34)+\',\'+l.2g+\',\'+(w[l.2h]!=6?w[l.2h]:l.2h)+(n||l.1m?\',\'+n+\':\'+(l.1m&&l.1m[0]?l.1m[0]:\'\')+\':\'+(l.1m&&l.1m[1]?l.1m[1]:\'\'):\'\')}P(5 i=0;i\';5 e=/(\\w+)=([^&]*)/g;5 f=e.3f(c.1Y);7C(f){d+=\'<7D 19="7E" 1w="\'+f[1]+\'" 7F="\'+($.31(f[1],[\'4l\',\'4h\',\'4k\',\'4o\'])>-1?7G(f[2]):f[2])+\'">\';f=e.3f(c.1Y)}d+=\'\';b=$(b);b.44();5 g=$(\'<4p>\').7H(b).3a({1c:\'1a%\',1d:\'1a%\'});5 h=g.4q()[0];h.7I();h.7J(d);h.7K();g.7L().4q().2f(\'3g\').7M()}15{5 i=$(1O 7N());i.7O(J(){$(b).2f(\'7P\').7Q().1Q().7R(7);G(c.27){G(c.3v){$.7S(c.1Y+\'&4d=7T&7U=?\',J(a){c.27.1W(b,[$.M.4r(a)])})}15{c.27.1W(b,[])}}});$(i).1f(\'7V\',c.1Y)}},4r:J(a){G(a&&a.1A){P(5 i=0;ib.W[2]){5 c=b.W[0];b.W[0]=b.W[2];b.W[2]=c}G(b.W[1]>b.W[3]){5 c=b.W[1];b.W[1]=b.W[3];b.W[3]=c}}}}I a},4g:J(a){5 b=(a.U==$.M.1i?7.1Z(a.L):a.U);5 c=(a.X==$.M.1i?7.20(a.L):a.X);5 d=\'\';P(5 i=0;i + + + + + + + + + + + + + + + + +
      + +
      +
      + + +
      + + + + +
      + + + \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/simpletree.js b/book/modules/luther/sphinx/animation/simpletree.js new file mode 100644 index 0000000..8a0bd41 --- /dev/null +++ b/book/modules/luther/sphinx/animation/simpletree.js @@ -0,0 +1,63 @@ +SimpleTreeModel = function() //construct the model +{ +} + +SimpleTreeModel.prototype.init = function(ctl) +{ + +var model = [ +{ nodelist: {C_0: {color: 'blue', style: 'filled'}, + H_0: {type: 's', shape: 'record', color: 'blue', label: 'foo'}, + H_1: {type: 's'}, H_2: {type: 's'}, + C_1: {type: 's'}, H_3: {type: 's'}, + H_4: {type: 's'}, H_5: {type: 's'}}, + edgelist: {C_0: ['H_0:f1', 'H_1', 'H_2', 'C_1'], C_1: ['H_3', 'H_4', 'H_5']}, + params: {node: {shape: 'circle', color: 'red'}, edge: {color: 'blue'}}}, + +{ nodelist: {C_0: {}, + H_0: {type: 's', shape: 'record', color: 'blue', label: 'foo', style: 'filled'}, + H_1: {type: 's'}, H_2: {type: 's'}, + C_1: {type: 's'}, H_3: {type: 's'}, + H_4: {type: 's'}, H_5: {type: 's'}}, + edgelist: {C_0: ['H_0:f1', 'H_1', 'H_2', 'C_1'], C_1: ['H_3', 'H_4', 'H_5']}, + params: {node: {shape: 'circle', color: 'red'}, edge: {color: 'blue'}}}, + +{ nodelist: {C_0: {}, + H_0: {type: 's', shape: 'record', label: 'foo'}, + H_1: {type: 's', style: 'filled', color: 'blue'}, H_2: {type: 's'}, + C_1: {type: 's'}, H_3: {type: 's'}, + H_4: {type: 's'}, H_5: {type: 's'}}, + edgelist: {C_0: ['H_0:f1', 'H_1', 'H_2', 'C_1'], C_1: ['H_3', 'H_4', 'H_5']}, + params: {node: {shape: 'circle', color: 'red'}, edge: {color: 'blue'}}}, + +{ nodelist: {C_0: {}, + H_0: {type: 's', shape: 'record', label: 'foo'}, + H_1: {type: 's', style: 'filled', color: 'blue'}, H_2: {type: 's'}, + C_1: {type: 's'}, H_3: {type: 's'}, + H_4: {type: 's'}, H_5: {type: 's'}, B_1: {type: 's', color: 'blue', style: 'filled'}}, + edgelist: {C_0: ['H_0:f1', 'H_1', 'H_2', 'C_1'], C_1: ['H_3', 'H_4', 'H_5'], H_1: ['B_1']}, + params: {node: {shape: 'circle', color: 'red'}, edge: {color: 'blue'}}}, +]; + +return model +} + + +TreeViewer = function() //construct the view +{ + +} + +TreeViewer.prototype.init = function(c) +{ + this.ctx = c +} + +TreeViewer.prototype.render = function(ascene) +{ + $('#ancan_div').attr('class','none') + $('#ancan_div').gchart($.gchart.graphviz(true, ascene.nodelist, + ascene.edgelist, ascene.params )) + +} + diff --git a/book/modules/luther/sphinx/animation/sortingbase.html b/book/modules/luther/sphinx/animation/sortingbase.html new file mode 100644 index 0000000..23064a2 --- /dev/null +++ b/book/modules/luther/sphinx/animation/sortingbase.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + +
      + +
      + +
      + +
      + +
      + +
      + +
      + +
      + + + + + + + + \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/sortingdemo.html b/book/modules/luther/sphinx/animation/sortingdemo.html new file mode 100644 index 0000000..bd36256 --- /dev/null +++ b/book/modules/luther/sphinx/animation/sortingdemo.html @@ -0,0 +1,22 @@ + + + + + + + + + + +
      +
      + +
      + + + + + + + + \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/sortingdemo.js b/book/modules/luther/sphinx/animation/sortingdemo.js new file mode 100644 index 0000000..b01dcb4 --- /dev/null +++ b/book/modules/luther/sphinx/animation/sortingdemo.js @@ -0,0 +1,268 @@ +BarList = function(hm) +{ + this.howmany = hm + this.bars = new Array() + + for (var i=0; i0 && (this.barlist.bars[position-1].getHeight() > currentvalue.getHeight())) + { + this.barlist.bars[position-1].setColor("red") + this.snapshot() + this.barlist.bars[position-1].setColor("black") + + this.barlist.bars[position] = this.barlist.bars[position-1].clone() + //this.barlist.bars[position-1] = currentvalue + this.barlist.bars[position-1].setHeight(0) + + + this.snapshot() + + position = position-1 + + } + + this.barlist.bars[position] = currentvalue + this.barlist.bars[position].setColor("blue") + this.snapshot() + this.barlist.bars[position].setColor("black") + } + this.snapshot()*/ + + this.barlist = new BarList(50) + this.snapshot() + for (var passnum=this.barlist.bars.length-1; passnum>0; passnum = passnum-1) + { + for (var i=0; i this.barlist.bars[i+1].getHeight()) + { + + var temp = this.barlist.bars[i] + this.barlist.bars[i] = this.barlist.bars[i+1] + this.barlist.bars[i+1] = temp + + this.snapshot() + + } + + this.barlist.bars[i].setColor("black") + this.barlist.bars[i+1].setColor("black") + + this.snapshot() + } + } + +} + +SortingAnimation.prototype.incCursor=function() +{ + if (this.cursor < this.framelist.length-1) + this.cursor = this.cursor + 1 +} + +SortingAnimation.prototype.decCursor=function() +{ + if (this.cursor > 0) + this.cursor = this.cursor -1 +} + +SortingAnimation.prototype.getCursor=function() +{ + return this.cursor +} + +SortingAnimation.prototype.setCursor=function(newc) +{ + this.cursor = newc +} + + +SortingAnimation.prototype.render = function(framenum) +{ + var currentframe = this.framelist[framenum] + this.sc.width = this.sc.width + + for (var idx=0; idx + + + + + + + + +
      + +
      + +
      + +
      + +
      + +
      + +
      + +
      + + + + + + + + \ No newline at end of file diff --git a/book/modules/luther/sphinx/animation/sortingpackage.js b/book/modules/luther/sphinx/animation/sortingpackage.js new file mode 100644 index 0000000..6d1bfc9 --- /dev/null +++ b/book/modules/luther/sphinx/animation/sortingpackage.js @@ -0,0 +1,870 @@ +DataItem = function(pos, h, col) +{ + this.height = h + this.position = pos + this.color = col +} + +DataItem.prototype.clone=function() +{ + var newitem = new DataItem(this.position,this.height,this.color) //make a copy + return newitem +} + +DataItem.prototype.getHeight=function() +{ + return this.height +} + +DataItem.prototype.getColor=function() +{ + return this.color +} + +DataItem.prototype.getPosition=function() +{ + return this.position +} + +DataItem.prototype.setHeight=function(newh) +{ + this.height = newh +} + +DataItem.prototype.setPosition=function(newp) +{ + this.position = newp +} + +DataItem.prototype.setColor=function(newc) +{ + this.color = newc +} + +BubbleSortModel = function() //construct the model +{ +} + +BubbleSortModel.prototype.init = function(ctl) +{ + this.mycontroller = ctl + + this.valuelist = new Array() + var howmany = 15 + + for (var i=0; i0; passnum = passnum-1) + { + for (var i=0; i this.valuelist[i+1].getHeight()) + { + + var temp = this.valuelist[i] + this.valuelist[i] = this.valuelist[i+1] + this.valuelist[i+1] = temp + + this.script.push(this.makescene()) + + } + + this.valuelist[i].setColor("black") + this.valuelist[i+1].setColor("black") + + this.script.push(this.makescene()) + } + } + + return this.script +} + +BubbleSortModel.prototype.makescene = function() +{ + var newscene = new Array() + for (var idx=0; idx0 && (this.valuelist[position-1].getHeight() > currentvalue.getHeight())) + { + this.valuelist[position-1].setColor("red") + this.script.push(this.makescene()) + this.valuelist[position-1].setColor("black") + + this.valuelist[position] = this.valuelist[position-1].clone() + //this.barlist.bars[position-1] = currentvalue + this.valuelist[position-1].setHeight(0) + + + this.script.push(this.makescene()) + + position = position-1 + + } + + this.valuelist[position] = currentvalue + this.valuelist[position].setColor("blue") + this.script.push(this.makescene()) + this.valuelist[position].setColor("black") + } + + this.script.push(this.makescene()) + return this.script +} + + +InsertionSortModel.prototype.makescene = function() +{ + var newscene = new Array() + for (var idx=0; idx0; fillslot = fillslot-1) + { var positionOfMax=0 + this.valuelist[positionOfMax].setColor("yellow") + this.valuelist[fillslot].setColor("blue") + this.script.push(this.makescene()) + + for (var i=1; i this.valuelist[positionOfMax].getHeight()) + { + this.valuelist[positionOfMax].setColor("black") + positionOfMax = i + this.valuelist[i].setColor("yellow") + this.script.push(this.makescene()) + } + else + { + this.valuelist[i].setColor("black") + this.script.push(this.makescene()) + } + } + + + var temp = this.valuelist[fillslot] + this.valuelist[fillslot] = this.valuelist[positionOfMax] + this.valuelist[positionOfMax] = temp + + this.script.push(this.makescene()) + + this.valuelist[fillslot].setColor("black") + + this.script.push(this.makescene()) + } + + return this.script +} + +SelectionSortModel.prototype.makescene = function() +{ + var newscene = new Array() + for (var idx=0; idx 0) + { + for (var startposition = 0; startposition < sublistcount; + startposition = startposition+1) + { + var gap = sublistcount + var start = startposition + this.valuelist[start].setColor("red") + for (var i=start+gap; i=gap && this.valuelist[position-gap].getHeight()>currentvalue.getHeight()) + { + this.valuelist[position] = this.valuelist[position-gap].clone() + this.valuelist[position-gap].setHeight(0) + position = position-gap + this.script.push(this.makescene()) + } + this.valuelist[position]=currentvalue + this.script.push(this.makescene()) + } + for (var clearidx=0; clearidx1) + { + var mid = start + Math.floor(len/2) + + this.chunkcolor(start,mid-1,"red") + this.script.push(this.makescene(this.valuelist)) + this.chunkcolor(start,mid-1,"black") + this.domergesort(start,mid-1) + + this.chunkcolor(mid,end,"blue") + this.script.push(this.makescene(this.valuelist)) + this.chunkcolor(mid,end,"black") + this.domergesort(mid,end) + + var i=start + var j=mid + + var newlist = Array() + while (i= pivotvalue && rightmark >= leftmark) + { + alist[rightmark].setColor("black") + rightmark = rightmark - 1 + if (rightmark >= leftmark) + { + alist[rightmark].setColor("blue") + this.script.push(this.makescene(this.valuelist))} + } + + if (rightmark < leftmark) + done = true + else + { + temp = alist[leftmark] + alist[leftmark] = alist[rightmark] + alist[rightmark] = temp + this.script.push(this.makescene(this.valuelist)) + alist[leftmark].setColor("black") + alist[rightmark].setColor("black") + } + } + + var temp = alist[first] + alist[first] = alist[rightmark] + alist[rightmark] = temp + + alist[first].setColor("black") + alist[rightmark].setColor("red") + this.script.push(this.makescene(this.valuelist)) + this.chunkcolor(0,this.valuelist.length-1,"black") + this.script.push(this.makescene(this.valuelist)) + + + return rightmark +} + +QuickSortModel.prototype.chunkcolor=function(start,end,c) +{ + for (var clearidx=start; clearidx<=end; clearidx++) + this.valuelist[clearidx].setColor(c) +} + + +QuickSortModel.prototype.makescene = function(somearray) +{ + var newscene = new Array() + for (var idx=0; idx 0) + this.cursor = this.cursor -1 +} + +Animator.prototype.getCursor=function() +{ + return this.cursor +} + +Animator.prototype.setCursor=function(newc) +{ + this.cursor = newc +} + +Animator.prototype.run = function() +{ + if (this.timer == null) + this.timer = setInterval("a.forward()",this.speed) +} + +Animator.prototype.stop = function() +{ + clearInterval(this.timer) + this.timer=null +} + +Animator.prototype.forward = function() +{ + this.incCursor() + this.sc.width = this.sc.width + this.viewer.render(this.script[this.getCursor()]) + if (this.getCursor() == this.script.length-1 && this.timer != null) + { + clearInterval(this.timer) + this.timer = null + } +} + +Animator.prototype.backward = function() +{ + this.decCursor() + this.sc.width = this.sc.width + this.viewer.render(this.script[this.getCursor()]) +} + +Animator.prototype.end = function() +{ + this.setCursor(this.script.length-1) + this.sc.width = this.sc.width + this.viewer.render(this.script[this.getCursor()]) + +} + +Animator.prototype.begin = function() +{ + this.setCursor(0) + this.sc.width=this.sc.width + this.viewer.render(this.script[this.getCursor()]) +} + +Animator.prototype.init = function() +{ + this.setCursor(0) + this.sc.width = this.sc.width + this.viewer.render(this.script[0]) +} + +init1 = function() +{ + a = new Animator(new BubbleSortModel(), new BarViewer()) + a.init() +} + +init2 = function() +{ + a = new Animator(new BubbleSortModel(), new ScatterViewer()) + a.init() +} + +init3 = function() +{ + a = new Animator(new BubbleSortModel(), new BoxViewer()) + a.init() +} + +init4 = function() +{ + a = new Animator(new SelectionSortModel(), new BarViewer()) + a.init() +} + +init5 = function() +{ + a = new Animator(new SelectionSortModel(), new ScatterViewer()) + a.init() +} + +init6 = function() +{ + a = new Animator(new SelectionSortModel(), new BoxViewer()) + a.init() +} + +init7 = function() +{ + a = new Animator(new InsertionSortModel(), new BarViewer()) + a.init() +} + +init8 = function() +{ + a = new Animator(new InsertionSortModel(), new ScatterViewer()) + a.init() +} + +init9 = function() +{ + a = new Animator(new InsertionSortModel(), new BoxViewer()) + a.init() +} + +init10 = function() +{ + a = new Animator(new ShellSortModel(), new BarViewer()) + a.init() +} + +init11 = function() +{ + a = new Animator(new ShellSortModel(), new ScatterViewer()) + a.init() +} + +init12 = function() +{ + a = new Animator(new ShellSortModel(), new BoxViewer()) + a.init() +} + +init13 = function() +{ + a = new Animator(new MergeSortModel(), new BarViewer()) + a.init() +} + +init14 = function() +{ + a = new Animator(new MergeSortModel(), new ScatterViewer()) + a.init() +} + +init15 = function() +{ + a = new Animator(new MergeSortModel(), new BoxViewer()) + a.init() +} + +init16 = function() +{ + a = new Animator(new QuickSortModel(), new BarViewer()) + a.init() +} + +init17 = function() +{ + a = new Animator(new QuickSortModel(), new ScatterViewer()) + a.init() +} + +init18 = function() +{ + a = new Animator(new QuickSortModel(), new BoxViewer()) + a.init() +} diff --git a/book/modules/luther/sphinx/animation/sortmodels.js b/book/modules/luther/sphinx/animation/sortmodels.js new file mode 100644 index 0000000..0397891 --- /dev/null +++ b/book/modules/luther/sphinx/animation/sortmodels.js @@ -0,0 +1,601 @@ +DataItem = function(pos, h, col) +{ + this.value = h + this.position = pos + this.color = col +} + +DataItem.prototype.clone=function() +{ + var newitem = new DataItem(this.position,this.value,this.color) //make a copy + return newitem +} + +DataItem.prototype.getValue=function() +{ + return this.value +} + +DataItem.prototype.getColor=function() +{ + return this.color +} + +DataItem.prototype.getPosition=function() +{ + return this.position +} + +DataItem.prototype.setValue=function(newh) +{ + this.value = newh +} + +DataItem.prototype.setPosition=function(newp) +{ + this.position = newp +} + +DataItem.prototype.setColor=function(newc) +{ + this.color = newc +} + +BubbleSortModel = function() //construct the model +{ +} + +BubbleSortModel.prototype.init = function(ctl) +{ + this.mycontroller = ctl + + this.valuelist = new Array() + var howmany = 15 + + for (var i=0; i0; passnum = passnum-1) + { + for (var i=0; i this.valuelist[i+1].getValue()) + { + + var temp = this.valuelist[i] + this.valuelist[i] = this.valuelist[i+1] + this.valuelist[i+1] = temp + + this.script.push(this.makescene()) + + } + + this.valuelist[i].setColor("black") + this.valuelist[i+1].setColor("black") + + this.script.push(this.makescene()) + } + } + + return this.script +} + +BubbleSortModel.prototype.makescene = function() +{ + var newscene = new Array() + for (var idx=0; idx0 && (this.valuelist[position-1].getValue() > currentvalue.getValue())) + { + this.valuelist[position-1].setColor("red") + this.script.push(this.makescene()) + this.valuelist[position-1].setColor("black") + + this.valuelist[position] = this.valuelist[position-1].clone() + //this.barlist.bars[position-1] = currentvalue + this.valuelist[position-1].setValue(0) + + + this.script.push(this.makescene()) + + position = position-1 + + } + + this.valuelist[position] = currentvalue + this.valuelist[position].setColor("blue") + this.script.push(this.makescene()) + this.valuelist[position].setColor("black") + } + + this.script.push(this.makescene()) + return this.script +} + + +InsertionSortModel.prototype.makescene = function() +{ + var newscene = new Array() + for (var idx=0; idx0; fillslot = fillslot-1) + { var positionOfMax=0 + this.valuelist[positionOfMax].setColor("yellow") + this.valuelist[fillslot].setColor("blue") + this.script.push(this.makescene()) + + for (var i=1; i this.valuelist[positionOfMax].getValue()) + { + this.valuelist[positionOfMax].setColor("black") + positionOfMax = i + this.valuelist[i].setColor("yellow") + this.script.push(this.makescene()) + } + else + { + this.valuelist[i].setColor("black") + this.script.push(this.makescene()) + } + } + + + var temp = this.valuelist[fillslot] + this.valuelist[fillslot] = this.valuelist[positionOfMax] + this.valuelist[positionOfMax] = temp + + this.script.push(this.makescene()) + + this.valuelist[fillslot].setColor("black") + + this.script.push(this.makescene()) + } + + return this.script +} + +SelectionSortModel.prototype.makescene = function() +{ + var newscene = new Array() + for (var idx=0; idx 0) + { + for (var startposition = 0; startposition < sublistcount; + startposition = startposition+1) + { + var gap = sublistcount + var start = startposition + this.valuelist[start].setColor("red") + for (var i=start+gap; i=gap && this.valuelist[position-gap].getValue()>currentvalue.getValue()) + { + this.valuelist[position] = this.valuelist[position-gap].clone() + this.valuelist[position-gap].setValue(0) + position = position-gap + this.script.push(this.makescene()) + } + this.valuelist[position]=currentvalue + this.script.push(this.makescene()) + } + for (var clearidx=0; clearidx1) + { + var mid = start + Math.floor(len/2) + + this.chunkcolor(start,mid-1,"red") + this.script.push(this.makescene(this.valuelist)) + this.chunkcolor(start,mid-1,"black") + this.domergesort(start,mid-1) + + this.chunkcolor(mid,end,"blue") + this.script.push(this.makescene(this.valuelist)) + this.chunkcolor(mid,end,"black") + this.domergesort(mid,end) + + var i=start + var j=mid + + var newlist = Array() + while (i= pivotvalue && rightmark >= leftmark) + { + alist[rightmark].setColor("black") + rightmark = rightmark - 1 + if (rightmark >= leftmark) + { + alist[rightmark].setColor("blue") + this.script.push(this.makescene(this.valuelist))} + } + + if (rightmark < leftmark) + done = true + else + { + temp = alist[leftmark] + alist[leftmark] = alist[rightmark] + alist[rightmark] = temp + this.script.push(this.makescene(this.valuelist)) + alist[leftmark].setColor("black") + alist[rightmark].setColor("black") + } + } + + var temp = alist[first] + alist[first] = alist[rightmark] + alist[rightmark] = temp + + alist[first].setColor("black") + alist[rightmark].setColor("red") + this.script.push(this.makescene(this.valuelist)) + this.chunkcolor(0,this.valuelist.length-1,"black") + this.script.push(this.makescene(this.valuelist)) + + + return rightmark +} + +QuickSortModel.prototype.chunkcolor=function(start,end,c) +{ + for (var clearidx=start; clearidx<=end; clearidx++) + this.valuelist[clearidx].setColor(c) +} + + +QuickSortModel.prototype.makescene = function(somearray) +{ + var newscene = new Array() + for (var idx=0; idx. +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from assessbase import Assessment +from multiplechoice import * +from textfield import * +from blankfill import * +import json +import random + +def setup(app): + app.add_directive('mchoicemf',MChoiceMF) + app.add_directive('mchoicema',MChoiceMA) + app.add_directive('fillintheblank',FillInTheBlank) + app.add_directive('mcmfrandom',MChoiceRandomMF) + app.add_directive('addbutton',AddButton) + app.add_directive('qnum',QuestionNumber) + app.add_role('textfield',textfield_role) + + + app.add_javascript('assess.js') + + app.add_node(MChoiceNode, html=(visit_mc_node, depart_mc_node)) + app.add_node(FITBNode, html=(visit_fitb_node, depart_fitb_node)) + +class AddButton(Directive): + required_arguments = 1 + optional_arguments = 1 + final_argument_whitespace = True + has_content = True + + def run(self): + """ + :param self: + :return: + .. addbutton:: bname + + ... + """ + + TEMPLATE_START = ''' +
      +
      + ''' + + TEMPLATE_END = ''' + + +
      + ''' + + self.options['divid'] = self.arguments[0] + + res = "" + res = TEMPLATE_START % self.options + + res += TEMPLATE_END % self.options + return [nodes.raw('',res , format='html')] + + +class QuestionNumber(Directive): + """Set Parameters for Question Numbering""" + required_arguments = 0 + optional_arguments = 3 + has_content = False + option_spec = { 'prefix': directives.unchanged, + 'suffix': directives.unchanged, + 'start': directives.positive_int + } + + def run(self): + env = self.state.document.settings.env + + if 'start' in self.options: + env.assesscounter = self.options['start'] - 1 + + if 'prefix' in self.options: + env.assessprefix = self.options['prefix'] + + if 'suffix' in self.options: + env.assesssuffix = self.options['suffix'] + + return [] + + + + + + +##################### + + + + + diff --git a/book/modules/luther/sphinx/assess/assessbase.py b/book/modules/luther/sphinx/assess/assessbase.py new file mode 100644 index 0000000..97499d9 --- /dev/null +++ b/book/modules/luther/sphinx/assess/assessbase.py @@ -0,0 +1,95 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +_base_js_escapes = ( + ('\\', r'\u005C'), + ('\'', r'\u0027'), + ('"', r'\u0022'), + ("'", r'\u0027'), + ('>', r'\u003E'), + ('<', r'\u003C'), + ('&', r'\u0026'), + ('=', r'\u003D'), + ('-', r'\u002D'), + (';', r'\u003B'), + (u'\u2028', r'\u2028'), + (u'\u2029', r'\u2029') +) + +# Escape every ASCII character with a value less than 32. +_js_escapes = (_base_js_escapes + + tuple([('%c' % z, '\\u%04X' % z) for z in range(32)])) + +# escapejs from Django: https://www.djangoproject.com/ +def escapejs(value): + """Hex encodes characters for use in JavaScript strings.""" + if not isinstance(value, basestring): + value = str(value) + + for bad, good in _js_escapes: + value = value.replace(bad, good) + + return value + + +class Assessment(Directive): + """Base Class for assessments""" + + def getNumber(self): + env = self.state.document.settings.env + if not hasattr(env,'assesscounter'): + env.assesscounter = 0 + env.assesscounter += 1 + + res = "Q-%d" + + if hasattr(env,'assessprefix'): + res = env.assessprefix + "%d" + + res = res % env.assesscounter + + if hasattr(env, 'assesssuffix'): + res += env.assesssuffix + + return res + + + def run(self): + + self.options['qnumber'] = self.getNumber() + + self.options['divid'] = self.arguments[0] + + if self.content[0][:2] == '..': # first line is a directive + self.content[0] = self.options['qnumber'] + ': \n\n' + self.content[0] + else: + self.content[0] = self.options['qnumber'] + ': ' + self.content[0] + + if self.content: + if 'iscode' in self.options: + self.options['bodytext'] = '
      ' + "\n".join(self.content) + '
      ' + else: + self.options['bodytext'] = "\n".join(self.content) + else: + self.options['bodytext'] = '\n' + + diff --git a/book/modules/luther/sphinx/assess/blankfill.py b/book/modules/luther/sphinx/assess/blankfill.py new file mode 100644 index 0000000..02be42c --- /dev/null +++ b/book/modules/luther/sphinx/assess/blankfill.py @@ -0,0 +1,123 @@ +# Copyright (C) 2013 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from assessbase import * +import json +import random + + + +class FITBNode(nodes.General, nodes.Element): + def __init__(self,content): + """ + + Arguments: + - `self`: + - `content`: + """ + super(FITBNode,self).__init__() + self.fitb_options = content + + +def visit_fitb_node(self,node): + res = node.template_start % node.fitb_options + + self.body.append(res) + + +def depart_fitb_node(self,node): + fbl = [] + for k in sorted(node.fitb_options.keys()): + if 'feedback' in k: + pair = eval(node.fitb_options[k]) + p1 = escapejs(pair[1]) + newpair = (pair[0],p1) + fbl.append(newpair) + + if 'casei' in node.fitb_options: + node.fitb_options['casei'] = 'true' + else: + node.fitb_options['casei'] = 'false' + node.fitb_options['fbl'] = json.dumps(fbl).replace('"',"'") + res = "" + + res += node.template_end % node.fitb_options + + self.body.append(res) + + +class FillInTheBlank(Assessment): + required_arguments = 1 + optional_arguments = 1 + final_argument_whitespace = True + has_content = True + option_spec = {'correct':directives.unchanged, + 'feedback':directives.unchanged, + 'feedback1':directives.unchanged, + 'feedback2':directives.unchanged, + 'feedback3':directives.unchanged, + 'feedback4':directives.unchanged, + 'blankid':directives.unchanged, + 'iscode':directives.flag, + 'casei':directives.flag # case insensitive matching + } + + def run(self): + """ + process the fillintheblank directive and generate html for output. + :param self: + :return: + .. fillintheblank:: qname + :iscode: boolean + :correct: somestring + :feedback: -- displayed if wrong + :feedback: ('.*', 'this is the message') + Question text + ... + """ + + TEMPLATE_START = ''' +
      + ''' + + TEMPLATE_END = ''' + + + +
      +
      +
      +
      +
      + ''' + + super(FillInTheBlank,self).run() + + fitbNode = FITBNode(self.options) + fitbNode.template_start = TEMPLATE_START + fitbNode.template_end = TEMPLATE_END + + self.state.nested_parse(self.content, self.content_offset, fitbNode) + + return [fitbNode] + + diff --git a/book/modules/luther/sphinx/assess/min/assess-ck.js b/book/modules/luther/sphinx/assess/min/assess-ck.js new file mode 100644 index 0000000..13a1371 --- /dev/null +++ b/book/modules/luther/sphinx/assess/min/assess-ck.js @@ -0,0 +1 @@ +var checkMe=function(a,b,c){var d,e=document.forms[a+"_form"].elements.group1;for(var f=e.length-1;f>=0;f--)e[f].checked&&(d=e[f].value);feedBack("#"+a+"_feedback",d==b,c)},feedBack=function(a,b,c){b?$(a).html("You are Correct!"):$(a).html("Inorrect. "+c)}; \ No newline at end of file diff --git a/book/modules/luther/sphinx/assess/multiplechoice.py b/book/modules/luther/sphinx/assess/multiplechoice.py new file mode 100644 index 0000000..5337389 --- /dev/null +++ b/book/modules/luther/sphinx/assess/multiplechoice.py @@ -0,0 +1,352 @@ +# Copyright (C) 2013 Bradley N. Miller, Barabara Ericson +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from assessbase import * +import json +import random + + + +class MChoiceNode(nodes.General, nodes.Element): + def __init__(self,content): + """ + + Arguments: + - `self`: + - `content`: + """ + super(MChoiceNode,self).__init__() + self.mc_options = content + + +def visit_mc_node(self,node): + res = "" + res = node.template_start % node.mc_options + + self.body.append(res) + + +def depart_mc_node(self,node): + res = node.template_form_start % node.mc_options + feedbackStr = "[" + currFeedback = "" + # Add all of the possible answers + okeys = node.mc_options.keys() + okeys.sort() + for k in okeys: + if 'answer_' in k: + x,label = k.split('_') + node.mc_options['alabel'] = label + node.mc_options['atext'] = node.mc_options[k] + res += node.template_option % node.mc_options + currFeedback = "feedback_" + label + feedbackStr = feedbackStr + "'" + escapejs(node.mc_options[currFeedback]) + "', " + + # store the feedback array with key feedback minus last comma + node.mc_options['feedback'] = feedbackStr[0:-2] + "]" + + res += node.template_end % node.mc_options + + self.body.append(res) + + + + +##################### +# multiple choice question with multiple feedback +# author - Barb Ericson +# author - Anusha +class MChoiceMF(Assessment): + required_arguments = 1 + optional_arguments = 1 + final_argument_whitespace = True + has_content = True + option_spec = {'answer_a':directives.unchanged, + 'answer_b':directives.unchanged, + 'answer_c':directives.unchanged, + 'answer_d':directives.unchanged, + 'answer_e':directives.unchanged, + 'correct':directives.unchanged, + 'feedback_a':directives.unchanged, + 'feedback_b':directives.unchanged, + 'feedback_c':directives.unchanged, + 'feedback_d':directives.unchanged, + 'feedback_e':directives.unchanged, + 'iscode':directives.flag + } + + def run(self): + """ + process the multiplechoice directive and generate html for output. + :param self: + :return: + .. mcmfstorage:: qname + :iscode: boolean + :answer_a: possible answer -- what follows _ is label + :answer_b: possible answer + ... + :answer_e: possible answer + :correct: leter of correct answer + :feedback_a: displayed if a is picked + :feedback_b: displayed if b is picked + :feedback_c: displayed if c is picked + :feedback_d: displayed if d is picked + :feedback_e: displayed if e is picked + + Question text + ... + """ + TEMPLATE_START = ''' +
      + ''' + + OPTION = ''' + +
      + ''' + + TEMPLATE_END = ''' + + + + +
      +
      +
      +
      + ''' + super(MChoiceMF,self).run() + + + + + mcNode = MChoiceNode(self.options) + mcNode.template_start = TEMPLATE_START + mcNode.template_form_start = '''
      ''' + mcNode.template_option = OPTION + mcNode.template_end = TEMPLATE_END + + self.state.nested_parse(self.content, self.content_offset, mcNode) + + return [mcNode] + + +##################### +# multiple choice question with multiple correct answers +# author - Barb Ericson + +class MChoiceMA(Assessment): + required_arguments = 1 + optional_arguments = 1 + final_argument_whitespace = True + has_content = True + option_spec = {'answer_a':directives.unchanged, + 'answer_b':directives.unchanged, + 'answer_c':directives.unchanged, + 'answer_d':directives.unchanged, + 'answer_e':directives.unchanged, + 'correct':directives.unchanged, + 'feedback_a':directives.unchanged, + 'feedback_b':directives.unchanged, + 'feedback_c':directives.unchanged, + 'feedback_d':directives.unchanged, + 'feedback_e':directives.unchanged, + 'iscode':directives.flag + } + + def run(self): + """ + process the multiplechoice directive and generate html for output. + :param self: + :return: + .. mchoicemf:: qname + :iscode: boolean + :answer_a: possible answer -- what follows _ is label + :answer_b: possible answer + ... + :answer_e: possible answer + :correct: comma seperated list of correct values a, b, c + :feedback_a: displayed if a is picked + :feedback_b: displayed if b is picked + :feedback_c: displayed if c is picked + :feedback_d: displayed if d is picked + :feedback_e: displayed if e is picked + + Question text + ... + """ + TEMPLATE_START = ''' +
      + ''' + + OPTION = ''' + +
      + ''' + + TEMPLATE_END = ''' + + + +
      +
      +
      +
      + ''' + + + super(MChoiceMA,self).run() + + mcNode = MChoiceNode(self.options) + mcNode.template_start = TEMPLATE_START + mcNode.template_form_start = '''
      ''' + mcNode.template_option = OPTION + mcNode.template_end = TEMPLATE_END + + self.state.nested_parse(self.content, self.content_offset, mcNode) + + return [mcNode] + + + +################################ + + +##################### +# display a multiple choice question with feedback that randomizes the answers +class MChoiceRandomMF(Assessment): + required_arguments = 1 + optional_arguments = 1 + final_argument_whitespace = True + has_content = True + option_spec = {'answer_a':directives.unchanged, + 'answer_b':directives.unchanged, + 'answer_c':directives.unchanged, + 'answer_d':directives.unchanged, + 'answer_e':directives.unchanged, + 'correct':directives.unchanged, + 'feedback_a':directives.unchanged, + 'feedback_b':directives.unchanged, + 'feedback_c':directives.unchanged, + 'feedback_d':directives.unchanged, + 'feedback_e':directives.unchanged, + 'iscode':directives.flag + } + + def run(self): + """ + process the multiplechoice directive and generate html for output. + :param self: + :return: + .. mcmfrandom:: qname + :iscode: boolean + :answer_a: possible answer -- what follows _ is label + :answer_b: possible answer + ... + :answer_e: possible answer + :correct: leter of correct answer + :feedback_a: displayed if a is picked + :feedback_b: displayed if b is picked + :feedback_c: displayed if c is picked + :feedback_d: displayed if d is picked + :feedback_e: displayed if e is picked + + Question text + ... + """ + TEMPLATE_START = ''' +
      +

      %(qnumber)s: %(bodytext)s

      + + ''' + + OPTION = ''' +
      + ''' + + TEMPLATE_END = ''' +
      + + +
      +
      + + +
      + ''' + + + super(MChoiceRandomMF,self).run() + + res = "" + res = TEMPLATE_START % self.options + feedbackStr = "[" + currFeedback = "" + # Add all of the possible answers + okeys = self.options.keys() + okeys.sort() + + + answ="" + feed="" + ansArr=[] + feedArray=[] + for k in okeys: + if 'answer_' in k: + ansArr.append(k) + for f in ansArr: + t,flabel=f.split("_") + feedArray.append(flabel) + + i=0 + for k in okeys: + if 'answer_' in k: + answ=answ+self.options[ansArr[i]]+"*separator*" + feed=feed+self.options["feedback_"+feedArray[i]]+"*separator*" + self.options['opi']=i+1 + res += OPTION % self.options + i=i+1 + + # Store the Answer and Feedback arrays + self.options['a']=answ + self.options['f']=feed + + op=self.options['correct'] + + if(op=='a'): + index=0 + elif(op=='b'): + index=1 + elif(op=='c'): + index=2 + elif(op=='d'): + index=3 + elif(op=='e'): + index=4 + self.options['corr']=self.options[ansArr[index]] + + res += TEMPLATE_END % self.options + return [nodes.raw('',res , format='html')] \ No newline at end of file diff --git a/book/modules/luther/sphinx/assess/prototype.html b/book/modules/luther/sphinx/assess/prototype.html new file mode 100644 index 0000000..88da41c --- /dev/null +++ b/book/modules/luther/sphinx/assess/prototype.html @@ -0,0 +1,53 @@ + + + trial + + + +
      +

      Evaluate the following boolean expression: True or False

      +
      + +
      + +
      + +
      + + + +
      +
      +
      + + + + \ No newline at end of file diff --git a/book/modules/luther/sphinx/assess/textfield.py b/book/modules/luther/sphinx/assess/textfield.py new file mode 100644 index 0000000..1953e1e --- /dev/null +++ b/book/modules/luther/sphinx/assess/textfield.py @@ -0,0 +1,65 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +import json +import random + +# setup is called in assess.py + +# app.add_node(MChoiceNode, html=(visit_mc_node, depart_mc_node)) +# app.add_node(FITBNode, html=(visit_fitb_node, depart_fitb_node)) + + + +def textfield_role(name, rawtext, text, lineno, inliner, options={}, content=[]): + ''' + Usage: + + In your document you can write :textfield:`myid:myvalue:width` + + This will translate to: + + + where width can be specified in pixels or percentage of page width (standard CSS syntax). + Width can also be specified using relative sizes: + mini, small, medium, large, xlarge, and xxlarge + + + + ''' + iid, value, width = text.split(':') + + if 'mini' in width: + width = '60px' + elif 'small' in width: + width = '90px' + elif 'medium' in width: + width = '150px' + elif 'large' in width: + width = '210px' + elif 'xlarge' in width: + width = '270px' + elif 'xxlarge' in width: + width = '530px' + + res = '''''' % (iid,width,value) + + return [nodes.raw('',res, format='html')],[] + diff --git a/book/modules/luther/sphinx/codelens/__init__.py b/book/modules/luther/sphinx/codelens/__init__.py new file mode 100644 index 0000000..7278a52 --- /dev/null +++ b/book/modules/luther/sphinx/codelens/__init__.py @@ -0,0 +1 @@ +from .visualizer import * \ No newline at end of file diff --git a/book/modules/luther/sphinx/codelens/pg_encoder.py b/book/modules/luther/sphinx/codelens/pg_encoder.py new file mode 100644 index 0000000..c47a051 --- /dev/null +++ b/book/modules/luther/sphinx/codelens/pg_encoder.py @@ -0,0 +1,256 @@ +# Online Python Tutor +# https://github.com/pgbovine/OnlinePythonTutor/ +# +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# Thanks to John DeNero for making the encoder work on both Python 2 and 3 + + +# Given an arbitrary piece of Python data, encode it in such a manner +# that it can be later encoded into JSON. +# http://json.org/ +# +# We use this function to encode run-time traces of data structures +# to send to the front-end. +# +# Format: +# Primitives: +# * None, int, long, float, str, bool - unchanged +# (json.dumps encodes these fine verbatim) +# +# Compound objects: +# * list - ['LIST', elt1, elt2, elt3, ..., eltN] +# * tuple - ['TUPLE', elt1, elt2, elt3, ..., eltN] +# * set - ['SET', elt1, elt2, elt3, ..., eltN] +# * dict - ['DICT', [key1, value1], [key2, value2], ..., [keyN, valueN]] +# * instance - ['INSTANCE', class name, [attr1, value1], [attr2, value2], ..., [attrN, valueN]] +# * class - ['CLASS', class name, [list of superclass names], [attr1, value1], [attr2, value2], ..., [attrN, valueN]] +# * function - ['FUNCTION', function name, parent frame ID (for nested functions)] +# * module - ['module', module name] +# * other - [, string representation of object] +# * compound object reference - ['REF', target object's unique_id] +# +# the unique_id is derived from id(), which allows us to capture aliasing + + +# number of significant digits for floats +FLOAT_PRECISION = 4 + + +import re, types +import sys +typeRE = re.compile("") +classRE = re.compile("") + +import inspect + +is_python3 = (sys.version_info[0] == 3) +if is_python3: + long = None # Avoid NameError when evaluating "long" + + +def is_class(dat): + """Return whether dat is a class.""" + if is_python3: + return isinstance(dat, type) + else: + return type(dat) in (types.ClassType, types.TypeType) + + +def is_instance(dat): + """Return whether dat is an instance of a class.""" + if is_python3: + return isinstance(type(dat), type) and not isinstance(dat, type) + else: + # ugh, classRE match is a bit of a hack :( + return type(dat) == types.InstanceType or classRE.match(str(type(dat))) + + +def get_name(obj): + """Return the name of an object.""" + return obj.__name__ if hasattr(obj, '__name__') else get_name(type(obj)) + + +# Note that this might BLOAT MEMORY CONSUMPTION since we're holding on +# to every reference ever created by the program without ever releasing +# anything! +class ObjectEncoder: + def __init__(self): + # Key: canonicalized small ID + # Value: encoded (compound) heap object + self.encoded_heap_objects = {} + + self.id_to_small_IDs = {} + self.cur_small_ID = 1 + + + def get_heap(self): + return self.encoded_heap_objects + + + def reset_heap(self): + # VERY IMPORTANT to reassign to an empty dict rather than just + # clearing the existing dict, since get_heap() could have been + # called earlier to return a reference to a previous heap state + self.encoded_heap_objects = {} + + def set_function_parent_frame_ID(self, ref_obj, enclosing_frame_id): + assert ref_obj[0] == 'REF' + func_obj = self.encoded_heap_objects[ref_obj[1]] + assert func_obj[0] == 'FUNCTION' + func_obj[-1] = enclosing_frame_id + + + # return either a primitive object or an object reference; + # and as a side effect, update encoded_heap_objects + def encode(self, dat, get_parent): + """Encode a data value DAT using the GET_PARENT function for parent ids.""" + # primitive type + if type(dat) in (int, long, float, str, bool, type(None)): + if type(dat) is float: + return round(dat, FLOAT_PRECISION) + else: + return dat + + # compound type - return an object reference and update encoded_heap_objects + else: + my_id = id(dat) + + try: + my_small_id = self.id_to_small_IDs[my_id] + except KeyError: + my_small_id = self.cur_small_ID + self.id_to_small_IDs[my_id] = self.cur_small_ID + self.cur_small_ID += 1 + + del my_id # to prevent bugs later in this function + + ret = ['REF', my_small_id] + + # punt early if you've already encoded this object + if my_small_id in self.encoded_heap_objects: + return ret + + + # major side-effect! + new_obj = [] + self.encoded_heap_objects[my_small_id] = new_obj + + typ = type(dat) + + if typ == list: + new_obj.append('LIST') + for e in dat: + new_obj.append(self.encode(e, get_parent)) + elif typ == tuple: + new_obj.append('TUPLE') + for e in dat: + new_obj.append(self.encode(e, get_parent)) + elif typ == set: + new_obj.append('SET') + for e in dat: + new_obj.append(self.encode(e, get_parent)) + elif typ == dict: + new_obj.append('DICT') + for (k, v) in dat.items(): + # don't display some built-in locals ... + if k not in ('__module__', '__return__', '__locals__'): + new_obj.append([self.encode(k, get_parent), self.encode(v, get_parent)]) + elif typ in (types.FunctionType, types.MethodType): + if is_python3: + argspec = inspect.getfullargspec(dat) + else: + argspec = inspect.getargspec(dat) + + printed_args = [e for e in argspec.args] + if argspec.varargs: + printed_args.append('*' + argspec.varargs) + + if is_python3: + if argspec.varkw: + printed_args.append('**' + argspec.varkw) + if argspec.kwonlyargs: + printed_args.extend(argspec.kwonlyargs) + else: + if argspec.keywords: + printed_args.append('**' + argspec.keywords) + + func_name = get_name(dat) + pretty_name = func_name + '(' + ', '.join(printed_args) + ')' + encoded_val = ['FUNCTION', pretty_name, None] + if get_parent: + enclosing_frame_id = get_parent(dat) + encoded_val[2] = enclosing_frame_id + new_obj.extend(encoded_val) + elif typ is types.BuiltinFunctionType: + pretty_name = get_name(dat) + '(...)' + new_obj.extend(['FUNCTION', pretty_name, None]) + elif is_class(dat) or is_instance(dat): + self.encode_class_or_instance(dat, new_obj) + elif typ is types.ModuleType: + new_obj.extend(['module', dat.__name__]) + else: + typeStr = str(typ) + m = typeRE.match(typeStr) + + if not m: + m = classRE.match(typeStr) + + assert m, typ + new_obj.extend([m.group(1), str(dat)]) + + return ret + + + def encode_class_or_instance(self, dat, new_obj): + """Encode dat as a class or instance.""" + if is_instance(dat): + if hasattr(dat, '__class__'): + # common case ... + class_name = get_name(dat.__class__) + else: + # super special case for something like + # "from datetime import datetime_CAPI" in Python 3.2, + # which is some weird 'PyCapsule' type ... + # http://docs.python.org/release/3.1.5/c-api/capsule.html + class_name = get_name(type(dat)) + + new_obj.extend(['INSTANCE', class_name]) + # don't traverse inside modules, or else risk EXPLODING the visualization + if class_name == 'module': + return + else: + superclass_names = [e.__name__ for e in dat.__bases__ if e is not object] + new_obj.extend(['CLASS', get_name(dat), superclass_names]) + + # traverse inside of its __dict__ to grab attributes + # (filter out useless-seeming ones): + hidden = ('__doc__', '__module__', '__return__', '__dict__', + '__locals__', '__weakref__') + if hasattr(dat, '__dict__'): + user_attrs = sorted([e for e in dat.__dict__ if e not in hidden]) + else: + user_attrs = [] + + for attr in user_attrs: + new_obj.append([self.encode(attr, None), self.encode(dat.__dict__[attr], None)]) + diff --git a/book/modules/luther/sphinx/codelens/pg_logger.py b/book/modules/luther/sphinx/codelens/pg_logger.py new file mode 100644 index 0000000..69a46e1 --- /dev/null +++ b/book/modules/luther/sphinx/codelens/pg_logger.py @@ -0,0 +1,872 @@ +# Online Python Tutor +# https://github.com/pgbovine/OnlinePythonTutor/ +# +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +# This is the meat of the Online Python Tutor back-end. It implements a +# full logger for Python program execution (based on pdb, the standard +# Python debugger imported via the bdb module), printing out the values +# of all in-scope data structures after each executed instruction. + + + +import sys +import bdb # the KEY import here! +import re +import traceback +import types + +is_python3 = (sys.version_info[0] == 3) + +if is_python3: + import io as cStringIO +else: + import cStringIO +import pg_encoder + + +# TODO: not threadsafe: + +# upper-bound on the number of executed lines, in order to guard against +# infinite loops +MAX_EXECUTED_LINES = 500 + +#DEBUG = False +DEBUG = False + + +# simple sandboxing scheme: +# +# - use resource.setrlimit to deprive this process of ANY file descriptors +# (which will cause file read/write and subprocess shell launches to fail) +# - restrict user builtins and module imports +# (beware that this is NOT foolproof at all ... there are known flaws!) +# +# ALWAYS use defense-in-depth and don't just rely on these simple mechanisms +try: + import resource + resource_module_loaded = True +except ImportError: + # Google App Engine doesn't seem to have the 'resource' module + resource_module_loaded = False + + +# ugh, I can't figure out why in Python 2, __builtins__ seems to +# be a dict, but in Python 3, __builtins__ seems to be a module, +# so just handle both cases ... UGLY! +if type(__builtins__) is dict: + BUILTIN_IMPORT = __builtins__['__import__'] +else: + assert type(__builtins__) is types.ModuleType + BUILTIN_IMPORT = __builtins__.__import__ + + +# whitelist of module imports +ALLOWED_MODULE_IMPORTS = ('math', 'random', 'datetime', + 'functools', 'operator', 'string', + 'collections', 're', 'json', + 'heapq', 'bisect') + +# PREEMPTIVELY import all of these modules, so that when the user's +# script imports them, it won't try to do a file read (since they've +# already been imported and cached in memory). Remember that when +# the user's code runs, resource.setrlimit(resource.RLIMIT_NOFILE, (0, 0)) +# will already be in effect, so no more files can be opened. +for m in ALLOWED_MODULE_IMPORTS: + __import__(m) + + +# Restrict imports to a whitelist +def __restricted_import__(*args): + if args[0] in ALLOWED_MODULE_IMPORTS: + return BUILTIN_IMPORT(*args) + else: + raise ImportError('{0} not supported'.format(args[0])) + + +# blacklist of builtins +BANNED_BUILTINS = ('reload', 'input', 'apply', 'open', 'compile', + 'file', 'eval', 'exec', 'execfile', + 'exit', 'quit', 'raw_input', 'help', + 'dir', 'globals', 'locals', 'vars') + + +IGNORE_VARS = set(('__user_stdout__', '__builtins__', '__name__', '__exception__', '__doc__', '__package__')) + +def get_user_stdout(frame): + return frame.f_globals['__user_stdout__'].getvalue() + +def get_user_globals(frame): + d = filter_var_dict(frame.f_globals) + # also filter out __return__ for globals only, but NOT for locals + if '__return__' in d: + del d['__return__'] + return d + +def get_user_locals(frame): + return filter_var_dict(frame.f_locals) + +def filter_var_dict(d): + ret = {} + for (k,v) in d.items(): + if k not in IGNORE_VARS: + ret[k] = v + return ret + + +# yield all function objects locally-reachable from frame, +# making sure to traverse inside all compound objects ... +def visit_all_locally_reachable_function_objs(frame): + for (k, v) in get_user_locals(frame).items(): + for e in visit_function_obj(v, set()): + if e: # only non-null if it's a function object + assert type(e) in (types.FunctionType, types.MethodType) + yield e + + +# TODO: this might be slow if we're traversing inside lots of objects: +def visit_function_obj(v, ids_seen_set): + v_id = id(v) + + # to prevent infinite loop + if v_id in ids_seen_set: + yield None + else: + ids_seen_set.add(v_id) + + typ = type(v) + + # simple base case + if typ in (types.FunctionType, types.MethodType): + yield v + + # recursive cases + elif typ in (list, tuple, set): + for child in v: + for child_res in visit_function_obj(child, ids_seen_set): + yield child_res + + elif typ == dict or pg_encoder.is_class(v) or pg_encoder.is_instance(v): + contents_dict = None + + if typ == dict: + contents_dict = v + # warning: some classes or instances don't have __dict__ attributes + elif hasattr(v, '__dict__'): + contents_dict = v.__dict__ + + if contents_dict: + for (key_child, val_child) in contents_dict.items(): + for key_child_res in visit_function_obj(key_child, ids_seen_set): + yield key_child_res + for val_child_res in visit_function_obj(val_child, ids_seen_set): + yield val_child_res + + # degenerate base case + yield None + + +class PGLogger(bdb.Bdb): + + def __init__(self, cumulative_mode, finalizer_func, disable_security_checks=False): + bdb.Bdb.__init__(self) + self.mainpyfile = '' + self._wait_for_mainpyfile = 0 + + self.disable_security_checks = disable_security_checks + + # a function that takes the output trace as a parameter and + # processes it + self.finalizer_func = finalizer_func + + # if True, then displays ALL stack frames that have ever existed + # rather than only those currently on the stack (and their + # lexical parents) + self.cumulative_mode = cumulative_mode + + # each entry contains a dict with the information for a single + # executed line + self.trace = [] + + #http://stackoverflow.com/questions/2112396/in-python-in-google-app-engine-how-do-you-capture-output-produced-by-the-print + self.GAE_STDOUT = sys.stdout + + # Key: function object + # Value: parent frame + self.closures = {} + + # set of function objects that were defined in the global scope + self.globally_defined_funcs = set() + + # Key: frame object + # Value: monotonically increasing small ID, based on call order + self.frame_ordered_ids = {} + self.cur_frame_id = 1 + + # List of frames to KEEP AROUND after the function exits. + # If cumulative_mode is True, then keep ALL frames in + # zombie_frames; otherwise keep only frames where + # nested functions were defined within them. + self.zombie_frames = [] + + # set of elements within zombie_frames that are also + # LEXICAL PARENTS of other frames + self.parent_frames_set = set() + + # all globals that ever appeared in the program, in the order in + # which they appeared. note that this might be a superset of all + # the globals that exist at any particular execution point, + # since globals might have been deleted (using, say, 'del') + self.all_globals_in_order = [] + + # very important for this single object to persist throughout + # execution, or else canonical small IDs won't be consistent. + self.encoder = pg_encoder.ObjectEncoder() + + self.executed_script = None # Python script to be executed! + + + def get_frame_id(self, cur_frame): + return self.frame_ordered_ids[cur_frame] + + # Returns the (lexical) parent of a function value. + def get_parent_of_function(self, val): + if val not in self.closures: + return None + return self.get_frame_id(self.closures[val]) + + + # Returns the (lexical) parent frame of the function that was called + # to create the stack frame 'frame'. + # + # OKAY, this is a SUPER hack, but I don't see a way around it + # since it's impossible to tell exactly which function + # ('closure') object was called to create 'frame'. + # + # The Python interpreter doesn't maintain this information, + # so unless we hack the interpreter, we will simply have + # to make an educated guess based on the contents of local + # variables inherited from possible parent frame candidates. + def get_parent_frame(self, frame): + for (func_obj, parent_frame) in self.closures.items(): + # ok, there's a possible match, but let's compare the + # local variables in parent_frame to those of frame + # to make sure. this is a hack that happens to work because in + # Python, each stack frame inherits ('inlines') a copy of the + # variables from its (lexical) parent frame. + if func_obj.__code__ == frame.f_code: + all_matched = True + for k in frame.f_locals: + # Do not try to match local names + if k in frame.f_code.co_varnames: + continue + if k != '__return__' and k in parent_frame.f_locals: + if parent_frame.f_locals[k] != frame.f_locals[k]: + all_matched = False + break + + if all_matched: + return parent_frame + + return None + + + def lookup_zombie_frame_by_id(self, frame_id): + # TODO: kinda inefficient + for e in self.zombie_frames: + if self.get_frame_id(e) == frame_id: + return e + assert False # should never get here + + + # unused ... + #def reset(self): + # bdb.Bdb.reset(self) + # self.forget() + + + def forget(self): + self.lineno = None + self.stack = [] + self.curindex = 0 + self.curframe = None + + def setup(self, f, t): + self.forget() + self.stack, self.curindex = self.get_stack(f, t) + self.curframe = self.stack[self.curindex][0] + + + # Override Bdb methods + + def user_call(self, frame, argument_list): + """This method is called when there is the remote possibility + that we ever need to stop in this function.""" + if self._wait_for_mainpyfile: + return + if self.stop_here(frame): + # delete __return__ so that on subsequent calls to + # a generator function, the OLD yielded (returned) + # value gets deleted from the frame ... + try: + del frame.f_locals['__return__'] + except KeyError: + pass + + self.interaction(frame, None, 'call') + + def user_line(self, frame): + """This function is called when we stop or break at this line.""" + if self._wait_for_mainpyfile: + if (self.canonic(frame.f_code.co_filename) != "" or + frame.f_lineno <= 0): + return + self._wait_for_mainpyfile = 0 + self.interaction(frame, None, 'step_line') + + def user_return(self, frame, return_value): + """This function is called when a return trap is set here.""" + frame.f_locals['__return__'] = return_value + self.interaction(frame, None, 'return') + + def user_exception(self, frame, exc_info): + exc_type, exc_value, exc_traceback = exc_info + """This function is called if an exception occurs, + but only if we are to stop at or just below this level.""" + frame.f_locals['__exception__'] = exc_type, exc_value + if type(exc_type) == type(''): + exc_type_name = exc_type + else: exc_type_name = exc_type.__name__ + self.interaction(frame, exc_traceback, 'exception') + + + # General interaction function + + def interaction(self, frame, traceback, event_type): + self.setup(frame, traceback) + tos = self.stack[self.curindex] + top_frame = tos[0] + lineno = tos[1] + + # don't trace inside of ANY functions that aren't user-written code + # (e.g., those from imported modules -- e.g., random, re -- or the + # __restricted_import__ function in this file) + # + # empirically, it seems like the FIRST entry in self.stack is + # the 'run' function from bdb.py, but everything else on the + # stack is the user program's "real stack" + for (cur_frame, cur_line) in self.stack[1:]: + # it seems like user-written code has a filename of '', + # but maybe there are false positives too? + if self.canonic(cur_frame.f_code.co_filename) != '': + return + # also don't trace inside of the magic "constructor" code + if cur_frame.f_code.co_name == '__new__': + return + # or __repr__, which is often called when running print statements + if cur_frame.f_code.co_name == '__repr__': + return + + + # debug ... + #print('===', file=sys.stderr) + #for (e,ln) in self.stack: + # print(e.f_code.co_name + ' ' + e.f_code.co_filename + ' ' + str(ln), file=sys.stderr) + #print('', file=sys.stderr) + + + # don't trace inside of our __restricted_import__ helper function + # (this check is now subsumed by the above check) + #if top_frame.f_code.co_name == '__restricted_import__': + # return + + self.encoder.reset_heap() # VERY VERY VERY IMPORTANT, + # or else we won't properly capture heap object mutations in the trace! + + if event_type == 'call': + # Don't be so strict about this assertion because it FAILS + # when you're calling a generator (not for the first time), + # since that frame has already previously been on the stack ... + #assert top_frame not in self.frame_ordered_ids + + self.frame_ordered_ids[top_frame] = self.cur_frame_id + self.cur_frame_id += 1 + + if self.cumulative_mode: + self.zombie_frames.append(top_frame) + + + # only render zombie frames that are NO LONGER on the stack + cur_stack_frames = [e[0] for e in self.stack] + zombie_frames_to_render = [e for e in self.zombie_frames if e not in cur_stack_frames] + + + # each element is a pair of (function name, ENCODED locals dict) + encoded_stack_locals = [] + + + # returns a dict with keys: function name, frame id, id of parent frame, encoded_locals dict + def create_encoded_stack_entry(cur_frame): + ret = {} + + + parent_frame_id_list = [] + + f = cur_frame + while True: + p = self.get_parent_frame(f) + if p: + pid = self.get_frame_id(p) + assert pid + parent_frame_id_list.append(pid) + f = p + else: + break + + + cur_name = cur_frame.f_code.co_name + + if cur_name == '': + cur_name = 'unnamed function' + + # encode in a JSON-friendly format now, in order to prevent ill + # effects of aliasing later down the line ... + encoded_locals = {} + + for (k, v) in get_user_locals(cur_frame).items(): + is_in_parent_frame = False + + # don't display locals that appear in your parents' stack frames, + # since that's redundant + for pid in parent_frame_id_list: + parent_frame = self.lookup_zombie_frame_by_id(pid) + if k in parent_frame.f_locals: + # ignore __return__, which is never copied + if k != '__return__': + # these values SHOULD BE ALIASES + # (don't do an 'is' check since it might not fire for primitives) + if parent_frame.f_locals[k] == v: + is_in_parent_frame = True + + if is_in_parent_frame and k not in cur_frame.f_code.co_varnames: + continue + + # don't display some built-in locals ... + if k == '__module__': + continue + + encoded_val = self.encoder.encode(v, self.get_parent_of_function) + encoded_locals[k] = encoded_val + + + # order the variable names in a sensible way: + + # Let's start with co_varnames, since it (often) contains all + # variables in this frame, some of which might not exist yet. + ordered_varnames = [] + for e in cur_frame.f_code.co_varnames: + if e in encoded_locals: + ordered_varnames.append(e) + + # sometimes co_varnames doesn't contain all of the true local + # variables: e.g., when executing a 'class' definition. in that + # case, iterate over encoded_locals and push them onto the end + # of ordered_varnames in alphabetical order + for e in sorted(encoded_locals.keys()): + if e != '__return__' and e not in ordered_varnames: + ordered_varnames.append(e) + + # finally, put __return__ at the very end + if '__return__' in encoded_locals: + ordered_varnames.append('__return__') + + # doctor Python 3 initializer to look like a normal function (denero) + if '__locals__' in encoded_locals: + ordered_varnames.remove('__locals__') + local = encoded_locals.pop('__locals__') + if encoded_locals.get('__return__', True) is None: + encoded_locals['__return__'] = local + + # crucial sanity checks! + assert len(ordered_varnames) == len(encoded_locals) + for e in ordered_varnames: + assert e in encoded_locals + + return dict(func_name=cur_name, + is_parent=(cur_frame in self.parent_frames_set), + frame_id=self.get_frame_id(cur_frame), + parent_frame_id_list=parent_frame_id_list, + encoded_locals=encoded_locals, + ordered_varnames=ordered_varnames) + + + i = self.curindex + + # look for whether a nested function has been defined during + # this particular call: + if i > 1: # i == 1 implies that there's only a global scope visible + for v in visit_all_locally_reachable_function_objs(top_frame): + if (v not in self.closures and \ + v not in self.globally_defined_funcs): + + # Look for the presence of the code object (v.func_code + # for Python 2 or v.__code__ for Python 3) in the + # constant pool (f_code.co_consts) of an enclosing + # stack frame, and set that frame as your parent. + # + # This technique properly handles lambdas passed as + # function parameters. e.g., this example: + # + # def foo(x): + # bar(lambda y: x + y) + # def bar(a): + # print a(20) + # foo(10) + chosen_parent_frame = None + for (my_frame, my_lineno) in self.stack: + if chosen_parent_frame: + break + + for frame_const in my_frame.f_code.co_consts: + if frame_const is (v.__code__ if is_python3 else v.func_code): + chosen_parent_frame = my_frame + break + + assert chosen_parent_frame # I hope this always passes :0 + + # this condition should be False for functions declared in global scope ... + if chosen_parent_frame in self.frame_ordered_ids: + self.closures[v] = chosen_parent_frame + self.parent_frames_set.add(chosen_parent_frame) # unequivocally add to this set!!! + if not chosen_parent_frame in self.zombie_frames: + self.zombie_frames.append(chosen_parent_frame) + else: + # if there is only a global scope visible ... + for (k, v) in get_user_globals(top_frame).items(): + if (type(v) in (types.FunctionType, types.MethodType) and \ + v not in self.closures): + self.globally_defined_funcs.add(v) + + + # climb up until you find '', which is (hopefully) the global scope + while True: + cur_frame = self.stack[i][0] + cur_name = cur_frame.f_code.co_name + if cur_name == '': + break + + encoded_stack_locals.append(create_encoded_stack_entry(cur_frame)) + i -= 1 + + zombie_encoded_stack_locals = [create_encoded_stack_entry(e) for e in zombie_frames_to_render] + + + # encode in a JSON-friendly format now, in order to prevent ill + # effects of aliasing later down the line ... + encoded_globals = {} + for (k, v) in get_user_globals(tos[0]).items(): + encoded_val = self.encoder.encode(v, self.get_parent_of_function) + encoded_globals[k] = encoded_val + + if k not in self.all_globals_in_order: + self.all_globals_in_order.append(k) + + # filter out globals that don't exist at this execution point + # (because they've been, say, deleted with 'del') + ordered_globals = [e for e in self.all_globals_in_order if e in encoded_globals] + assert len(ordered_globals) == len(encoded_globals) + + + # merge zombie_encoded_stack_locals and encoded_stack_locals + # into one master ordered list using some simple rules for + # making it look aesthetically pretty + stack_to_render = []; + + # first push all regular stack entries + if encoded_stack_locals: + for e in encoded_stack_locals: + e['is_zombie'] = False + e['is_highlighted'] = False + stack_to_render.append(e) + + # highlight the top-most active stack entry + stack_to_render[0]['is_highlighted'] = True + + + # now push all zombie stack entries + for e in zombie_encoded_stack_locals: + # don't display return value for zombie frames + # TODO: reconsider ... + ''' + try: + e['ordered_varnames'].remove('__return__') + except ValueError: + pass + ''' + + e['is_zombie'] = True + e['is_highlighted'] = False # never highlight zombie entries + + stack_to_render.append(e) + + # now sort by frame_id since that sorts frames in "chronological + # order" based on the order they were invoked + stack_to_render.sort(key=lambda e: e['frame_id']) + + + + # create a unique hash for this stack entry, so that the + # frontend can uniquely identify it when doing incremental + # rendering. the strategy is to use a frankenstein-like mix of the + # relevant fields to properly disambiguate closures and recursive + # calls to the same function + for e in stack_to_render: + hash_str = e['func_name'] + # frame_id is UNIQUE, so it can disambiguate recursive calls + hash_str += '_f' + str(e['frame_id']) + + # needed to refresh GUI display ... + if e['is_parent']: + hash_str += '_p' + + # TODO: this is no longer needed, right? (since frame_id is unique) + #if e['parent_frame_id_list']: + # hash_str += '_p' + '_'.join([str(i) for i in e['parent_frame_id_list']]) + if e['is_zombie']: + hash_str += '_z' + + e['unique_hash'] = hash_str + + + trace_entry = dict(line=lineno, + event=event_type, + func_name=tos[0].f_code.co_name, + globals=encoded_globals, + ordered_globals=ordered_globals, + stack_to_render=stack_to_render, + heap=self.encoder.get_heap(), + stdout=get_user_stdout(tos[0])) + + # if there's an exception, then record its info: + if event_type == 'exception': + # always check in f_locals + exc = frame.f_locals['__exception__'] + trace_entry['exception_msg'] = exc[0].__name__ + ': ' + str(exc[1]) + + self.trace.append(trace_entry) + + + # sanity check to make sure the state of the world at a 'call' instruction + # is identical to that at the instruction immediately following it ... + ''' + if len(self.trace) > 1: + cur = self.trace[-1] + prev = self.trace[-2] + if prev['event'] == 'call': + assert cur['globals'] == prev['globals'] + for (s1, s2) in zip(cur['stack_to_render'], prev['stack_to_render']): + assert s1 == s2 + assert cur['heap'] == prev['heap'] + assert cur['stdout'] == prev['stdout'] + ''' + + + if len(self.trace) >= MAX_EXECUTED_LINES: + self.trace.append(dict(event='instruction_limit_reached', exception_msg='(stopped after ' + str(MAX_EXECUTED_LINES) + ' steps to prevent possible infinite loop)')) + self.force_terminate() + + self.forget() + + + def _runscript(self, script_str): + self.executed_script = script_str + + # When bdb sets tracing, a number of call and line events happens + # BEFORE debugger even reaches user's code (and the exact sequence of + # events depends on python version). So we take special measures to + # avoid stopping before we reach the main script (see user_line and + # user_call for details). + self._wait_for_mainpyfile = 1 + + + # ok, let's try to sorta 'sandbox' the user script by not + # allowing certain potentially dangerous operations. + user_builtins = {} + + # ugh, I can't figure out why in Python 2, __builtins__ seems to + # be a dict, but in Python 3, __builtins__ seems to be a module, + # so just handle both cases ... UGLY! + if type(__builtins__) is dict: + builtin_items = __builtins__.items() + else: + assert type(__builtins__) is types.ModuleType + builtin_items = [] + for k in dir(__builtins__): + builtin_items.append((k, getattr(__builtins__, k))) + + for (k, v) in builtin_items: + if k in BANNED_BUILTINS: + continue + elif k == '__import__': + user_builtins[k] = __restricted_import__ + else: + user_builtins[k] = v + + + user_stdout = cStringIO.StringIO() + + sys.stdout = user_stdout + user_globals = {"__name__" : "__main__", + "__builtins__" : user_builtins, + "__user_stdout__" : user_stdout} + + try: + # enforce resource limits RIGHT BEFORE running script_str + + # set ~200MB virtual memory limit AND a 5-second CPU time + # limit (tuned for Webfaction shared hosting) to protect against + # memory bombs such as: + # x = 2 + # while True: x = x*x + if resource_module_loaded and (not self.disable_security_checks): + resource.setrlimit(resource.RLIMIT_AS, (200000000, 200000000)) + resource.setrlimit(resource.RLIMIT_CPU, (5, 5)) + + # protect against unauthorized filesystem accesses ... + resource.setrlimit(resource.RLIMIT_NOFILE, (0, 0)) # no opened files allowed + + # VERY WEIRD. If you activate this resource limitation, it + # ends up generating an EMPTY trace for the following program: + # "x = 0\nfor i in range(10):\n x += 1\n print x\n x += 1\n" + # (at least on my Webfaction hosting with Python 2.7) + #resource.setrlimit(resource.RLIMIT_FSIZE, (0, 0)) # (redundancy for paranoia) + + # sys.modules contains an in-memory cache of already-loaded + # modules, so if you delete modules from here, they will + # need to be re-loaded from the filesystem. + # + # Thus, as an extra precaution, remove these modules so that + # they can't be re-imported without opening a new file, + # which is disallowed by resource.RLIMIT_NOFILE + # + # Of course, this isn't a foolproof solution by any means, + # and it might lead to UNEXPECTED FAILURES later in execution. + del sys.modules['os'] + del sys.modules['sys'] + + self.run(script_str, user_globals, user_globals) + # sys.exit ... + except SystemExit: + #sys.exit(0) + raise bdb.BdbQuit + except: + if DEBUG: + traceback.print_exc() + + trace_entry = dict(event='uncaught_exception') + + (exc_type, exc_val, exc_tb) = sys.exc_info() + if hasattr(exc_val, 'lineno'): + trace_entry['line'] = exc_val.lineno + if hasattr(exc_val, 'offset'): + trace_entry['offset'] = exc_val.offset + + trace_entry['exception_msg'] = type(exc_val).__name__ + ": " + str(exc_val) + + # SUPER SUBTLE! if this exact same exception has already been + # recorded by the program, then DON'T record it again as an + # uncaught_exception + already_caught = False + for e in self.trace: + if e['event'] == 'exception' and e['exception_msg'] == trace_entry['exception_msg']: + already_caught = True + break + + if not already_caught: + self.trace.append(trace_entry) + + raise bdb.BdbQuit # need to forceably STOP execution + + + def force_terminate(self): + #self.finalize() + raise bdb.BdbQuit # need to forceably STOP execution + + + def finalize(self): + sys.stdout = self.GAE_STDOUT # very important! + + assert len(self.trace) <= (MAX_EXECUTED_LINES + 1) + + # don't do this anymore ... + ''' + # filter all entries after 'return' from '', since they + # seem extraneous: + res = [] + for e in self.trace: + res.append(e) + if e['event'] == 'return' and e['func_name'] == '': + break + ''' + + res = self.trace + + # if the SECOND to last entry is an 'exception' + # and the last entry is return from , then axe the last + # entry, for aesthetic reasons :) + if len(res) >= 2 and \ + res[-2]['event'] == 'exception' and \ + res[-1]['event'] == 'return' and res[-1]['func_name'] == '': + res.pop() + + self.trace = res + + return self.finalizer_func(self.executed_script, self.trace) + + + +# the MAIN meaty function!!! +def exec_script_str(script_str, cumulative_mode, finalizer_func): + logger = PGLogger(cumulative_mode, finalizer_func) + + try: + logger._runscript(script_str) + except bdb.BdbQuit: + pass + finally: + logger.finalize() + + +# disables security check and returns the result of finalizer_func +# WARNING: ONLY RUN THIS LOCALLY and never over the web, since +# security checks are disabled +def exec_script_str_local(script_str, cumulative_mode, finalizer_func): + logger = PGLogger(cumulative_mode, finalizer_func, disable_security_checks=True) + + try: + logger._runscript(script_str) + except bdb.BdbQuit: + pass + finally: + return logger.finalize() + diff --git a/book/modules/luther/sphinx/codelens/visualizer.py b/book/modules/luther/sphinx/codelens/visualizer.py new file mode 100644 index 0000000..02e8c0b --- /dev/null +++ b/book/modules/luther/sphinx/codelens/visualizer.py @@ -0,0 +1,210 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from pg_logger import exec_script_str_local +import json + +def setup(app): + app.add_directive('codelens',Codelens) + app.add_stylesheet('css/pytutor.css') + app.add_stylesheet('css/basic.css') + + app.add_javascript('js/d3.v2.min.js') + app.add_javascript('jquery-migrate-1.2.1.min.js') # needed so that ba-bbq can use the latest jQuery that we've included + app.add_javascript('js/jquery.ba-bbq.min.js') + app.add_javascript('js/jquery.jsPlumb-1.3.10-all-min.js') + app.add_javascript('js/pytutor.js') + + + +VIS = ''' +
      +

      %(caption)s (%(divid)s)

      ''' + +QUESTION = ''' + + +''' + +DATA = ''' + +''' + + +# Some documentation to help the author. +# Here's and example of a single stack frame. +# you might ask a qestion about the value of a global variable +# in which case the correct answer is expressed as: +# +# globals.a +# +# You could ask about a value on the heap +# +# heap.variable +# +# You could ask about a local variable -- not shown here. +# +# locals.variable +# +# You could even ask about what line is going to be executed next +# +# line +# { +# "ordered_globals": [ +# "a", +# "b" +# ], +# "stdout": "1\n", +# "func_name": "", +# "stack_to_render": [], +# "globals": { +# "a": 1, +# "b": 1 +# }, +# "heap": {}, +# "line": 5, +# "event": "return" +# } + + +class Codelens(Directive): + required_arguments = 1 + optional_arguments = 1 + option_spec = { + 'tracedata':directives.unchanged, + 'caption':directives.unchanged, + 'showoutput':directives.flag, + 'question':directives.unchanged, + 'correct':directives.unchanged, + 'feedback':directives.unchanged, + 'breakline':directives.nonnegative_int + } + + has_content = True + + def run(self): + + self.JS_VARNAME = "" + self.JS_VARVAL = "" + + def raw_dict(input_code, output_trace): + ret = dict(code=input_code, trace=output_trace) + return ret + + def js_var_finalizer(input_code, output_trace): + global JS_VARNAME + ret = dict(code=input_code, trace=output_trace) + json_output = json.dumps(ret, indent=None) + return "var %s = %s;" % (self.JS_VARNAME, json_output) + + + self.options['divid'] = self.arguments[0] + if self.content: + source = "\n".join(self.content) + else: + source = '\n' + + CUMULATIVE_MODE=False + self.JS_VARNAME = self.options['divid']+'_trace' + if 'showoutput' not in self.options: + self.options['embedded'] = 'true' # to set embeddedmode to true + else: + self.options['embedded'] = 'false' + + + + if 'question' in self.options: + curTrace = exec_script_str_local(source, CUMULATIVE_MODE, raw_dict) + self.inject_questions(curTrace) + json_output = json.dumps(curTrace, indent=None) + self.options['tracedata'] = "var %s = %s;" % (self.JS_VARNAME, json_output) + else: + self.options['tracedata'] = exec_script_str_local(source, CUMULATIVE_MODE, js_var_finalizer) + + res = VIS + if 'caption' not in self.options: + self.options['caption'] = '' + if 'question' in self.options: + res += QUESTION + if 'tracedata' in self.options: + res += DATA + return [nodes.raw('',res % self.options,format='html')] + + def inject_questions(self,curTrace): + if 'breakline' not in self.options: + raise RuntimeError('Must have breakline option') + breakline = self.options['breakline'] + for frame in curTrace['trace']: + if frame['line'] == breakline: + frame['question'] = dict(text=self.options['question'], + correct = self.options['correct'], + div = self.options['divid']+'_modal', + feedback = self.options['feedback'] ) diff --git a/book/modules/luther/sphinx/datafile/__init__.py b/book/modules/luther/sphinx/datafile/__init__.py new file mode 100644 index 0000000..acd86b4 --- /dev/null +++ b/book/modules/luther/sphinx/datafile/__init__.py @@ -0,0 +1,127 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +def setup(app): + app.add_directive('datafile',DataFile) + app.add_javascript('bookfuncs.js') + app.add_javascript('skulpt/dist/skulpt.js') + app.add_javascript('skulpt/dist/builtin.js') + + app.add_node(DataFileNode, html=(visit_df_node, depart_df_node)) + + app.connect('doctree-resolved',process_datafile_nodes) + app.connect('env-purge-doc', purge_datafiles) + + +PRE = ''' +
      +%(filecontent)s
      +
      +''' + +TEXTA = ''' + +''' + +class DataFileNode(nodes.General, nodes.Element): + def __init__(self,content): + """ + Arguments: + - `self`: + - `content`: + """ + super(DataFileNode,self).__init__() + self.df_content = content + +# self for these functions is an instance of the writer class. For example +# in html, self is sphinx.writers.html.SmartyPantsHTMLTranslator +# The node that is passed as a parameter is an instance of our node class. +def visit_df_node(self,node): + if node.df_content['edit'] == True: + res = TEXTA + else: + res = PRE + res = res % node.df_content + + res = res.replace("u'","'") # hack: there must be a better way to include the list and avoid unicode strings + + self.body.append(res) + +def depart_df_node(self,node): + ''' This is called at the start of processing an datafile node. If datafile had recursive nodes + etc and did not want to do all of the processing in visit_ac_node any finishing touches could be + added here. + ''' + pass + + +def process_datafile_nodes(app,env,docname): + pass + + +def purge_datafiles(app,env,docname): + pass + + +class DataFile(Directive): + required_arguments = 1 + optional_arguments = 2 + has_content = True + option_spec = { + 'hide':directives.flag, + 'edit':directives.flag, + 'rows':directives.positive_int, + 'cols':directives.positive_int + } + + def run(self): + env = self.state.document.settings.env + + if not hasattr(env,'datafilecounter'): + env.datafilecounter = 0 + env.datafilecounter += 1 + + if 'cols' not in self.options: + self.options['cols'] = min(65,max([len(x) for x in self.content])) + if 'rows'not in self.options: + self.options['rows'] = 20 + + self.options['divid'] = self.arguments[0] + if self.content: + source = "\n".join(self.content) + else: + source = '\n' + self.options['filecontent'] = source + + if 'hide' not in self.options: + self.options['hide'] = 'block' + else: + self.options['hide'] = 'none' + + if 'edit' not in self.options: + self.options['edit'] = False + + return [DataFileNode(self.options)] + diff --git a/book/modules/luther/sphinx/disqus/__init__.py b/book/modules/luther/sphinx/disqus/__init__.py new file mode 100644 index 0000000..d089fe3 --- /dev/null +++ b/book/modules/luther/sphinx/disqus/__init__.py @@ -0,0 +1,2 @@ + +from .disqus import * diff --git a/book/modules/luther/sphinx/disqus/disqus.py b/book/modules/luther/sphinx/disqus/disqus.py new file mode 100644 index 0000000..267ec9f --- /dev/null +++ b/book/modules/luther/sphinx/disqus/disqus.py @@ -0,0 +1,115 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'isaacdontjelindell' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +DISQUS_BOX = """\ + +""" + +DISQUS_LINK = """ +Show Comments + +""" + + +def setup(app): + app.add_directive('disqus', DisqusDirective) + + app.add_node(DisqusNode, html=(visit_disqus_node, depart_disqus_node)) + app.connect('doctree-resolved' ,process_disqus_nodes) + app.connect('env-purge-doc', purge_disqus_nodes) + +class DisqusNode(nodes.General, nodes.Element): + def __init__(self,content): + super(DisqusNode,self).__init__() + self.disqus_components = content + + +def visit_disqus_node(self, node): + res = DISQUS_BOX + res += DISQUS_LINK + + res = res % node.disqus_components + + self.body.append(res) + +def depart_disqus_node(self,node): + pass + +def process_disqus_nodes(app, env, docname): + pass + +def purge_disqus_nodes(app, env, docname): + pass + + +class DisqusDirective(Directive): + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = True + has_content = False + option_spec = {'shortname':directives.unchanged_required, + 'identifier':directives.unchanged_required + } + + + def run(self): + """ + generate html to include Disqus box. + :param self: + :return: + """ + + return [DisqusNode(self.options)] + diff --git a/book/modules/luther/sphinx/meta/__init__.py b/book/modules/luther/sphinx/meta/__init__.py new file mode 100644 index 0000000..b234a99 --- /dev/null +++ b/book/modules/luther/sphinx/meta/__init__.py @@ -0,0 +1,2 @@ + +from .meta import * diff --git a/book/modules/luther/sphinx/meta/meta.py b/book/modules/luther/sphinx/meta/meta.py new file mode 100644 index 0000000..1fab214 --- /dev/null +++ b/book/modules/luther/sphinx/meta/meta.py @@ -0,0 +1,62 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +def setup(app): + app.add_directive('shortname',Meta) + app.add_directive('description',Meta) + + +class Meta(Directive): + required_arguments = 1 + optional_arguments = 50 + + def run(self): + """ + process the video directive and generate html for output. + :param self: + :return: + """ + return [nodes.raw('','', format='html')] + + + +source = """\ +This is some text. + +.. shortname:: divid +.. description:: foo bar baz + +This is some more text. +""" + +if __name__ == '__main__': + from docutils.core import publish_parts + + directives.register_directive('shortname',Meta) + directives.register_directive('description',Meta) + + doc_parts = publish_parts(source, + settings_overrides={'output_encoding': 'utf8', + 'initial_header_level': 2}, + writer_name="html") + + print doc_parts['html_body'] diff --git a/book/modules/luther/sphinx/poll/__init__.py b/book/modules/luther/sphinx/poll/__init__.py new file mode 100644 index 0000000..721edea --- /dev/null +++ b/book/modules/luther/sphinx/poll/__init__.py @@ -0,0 +1 @@ +from .poll import * diff --git a/book/modules/luther/sphinx/poll/poll.py b/book/modules/luther/sphinx/poll/poll.py new file mode 100644 index 0000000..2c9146c --- /dev/null +++ b/book/modules/luther/sphinx/poll/poll.py @@ -0,0 +1,149 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'isaacdontjelindell' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +def setup(app): + app.add_directive('poll', PollDirective) + + app.add_node(PollNode, html=(visit_poll_node, depart_poll_node)) + + app.add_javascript('poll.js') + app.add_stylesheet('poll.css') + + +BEGIN = """
      """ + +BEGIN_FORM = """ +
      +
      + Poll +
      %(content)s
      +
      +
      +""" + +POLL_ELEMENT = """ + +""" + +END_POLL_OPTIONS = """
      """ + +COMMENT = """ +
      + +
      +""" + +END_POLL_INPUT = """ + +
      +""" + +END_FORM = """ +
      + +""" + +RESULTS_DIV = """
      """ + + + +END = """ + +
      +""" + +class PollNode(nodes.General, nodes.Element): + def __init__(self, options): + super(PollNode, self).__init__() + self.pollnode_components = options + +def visit_poll_node(self, node): + res = BEGIN + res += BEGIN_FORM + + for i in range(1, node.pollnode_components['scale']+1): + res += POLL_ELEMENT % {'divid':node.pollnode_components['divid'], 'value':i} + + res += END_POLL_OPTIONS + + if 'allowcomment' in node.pollnode_components: + res += COMMENT + + res += END_POLL_INPUT + res += END_FORM + res += RESULTS_DIV + res += END + + res = res % node.pollnode_components + self.body.append(res) + +def depart_poll_node(self,node): + pass + + +class PollDirective(Directive): + required_arguments = 1 # the div id + optional_arguments = 0 + final_argument_whitespace = True + has_content = True + option_spec = {'scale':directives.positive_int, + 'allowcomment': directives.flag} + + node_class = PollNode + + def run(self): + # Raise an error if the directive does not have contents. + self.assert_has_content() + + self.options['divid'] = self.arguments[0] + self.options['content'] = "

      ".join(self.content) + poll_node = PollNode(self.options) + + return [poll_node] + + diff --git a/book/modules/luther/sphinx/reveal/__init__.py b/book/modules/luther/sphinx/reveal/__init__.py new file mode 100644 index 0000000..3fab00e --- /dev/null +++ b/book/modules/luther/sphinx/reveal/__init__.py @@ -0,0 +1 @@ +from .reveal import * \ No newline at end of file diff --git a/book/modules/luther/sphinx/reveal/reveal.py b/book/modules/luther/sphinx/reveal/reveal.py new file mode 100644 index 0000000..f5678a2 --- /dev/null +++ b/book/modules/luther/sphinx/reveal/reveal.py @@ -0,0 +1,64 @@ +__author__ = 'isaacdontjelindell' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + +def setup(app): + app.add_directive('reveal', RevealDirective) + + app.add_node(RevealNode, html=(visit_reveal_node, depart_reveal_node)) + + +BEGIN = """ + + +

      +""" + +class RevealNode(nodes.General, nodes.Element): + def __init__(self,content): + super(RevealNode,self).__init__() + self.reveal_components = content + + +def visit_reveal_node(self, node): + res = BEGIN % node.reveal_components + + self.body.append(res) + +def depart_reveal_node(self,node): + res = END % node.reveal_components + + self.body.append(res) + +class RevealDirective(Directive): + required_arguments = 1 + optional_arguments = 0 + final_argument_whitespace = True + has_content = True + option_spec = {"showtitle":directives.unchanged, + "hidetitle":directives.unchanged} + + def run(self): + self.assert_has_content() # an empty reveal block isn't very useful... + + if not 'showtitle' in self.options: + self.options['showtitle'] = "Show" + if not 'hidetitle' in self.options: + self.options['hidetitle'] = "Hide" + + self.options['divid'] = self.arguments[0] + + reveal_node = RevealNode(self.options) + + self.state.nested_parse(self.content, self.content_offset, reveal_node) + + return [reveal_node] + diff --git a/book/modules/luther/sphinx/tabbedStuff/__init__.py b/book/modules/luther/sphinx/tabbedStuff/__init__.py new file mode 100644 index 0000000..e1d0a8c --- /dev/null +++ b/book/modules/luther/sphinx/tabbedStuff/__init__.py @@ -0,0 +1 @@ +from .tabbedStuff import * diff --git a/book/modules/luther/sphinx/tabbedStuff/tabbedStuff.py b/book/modules/luther/sphinx/tabbedStuff/tabbedStuff.py new file mode 100644 index 0000000..83d1242 --- /dev/null +++ b/book/modules/luther/sphinx/tabbedStuff/tabbedStuff.py @@ -0,0 +1,178 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'isaacdontjelindell' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +def setup(app): + app.add_directive('tabbed', TabbedStuffDirective) + app.add_directive('tab', TabDirective) + + app.add_node(TabNode, html=(visit_tab_node, depart_tab_node)) + app.add_node(TabbedStuffNode, html=(visit_tabbedstuff_node, depart_tabbedstuff_node)) + + app.add_stylesheet('tabbedstuff.css') + + +BEGIN = """
      """ + +TABLIST_BEGIN = """""" + +TABCONTENT_BEGIN = """
      """ +TABCONTENT_END = """
      """ + +TABDIV_BEGIN = """
      """ + +TABDIV_END = """
      """ + +END = """ +
      + +""" + +class TabNode(nodes.General, nodes.Element): + def __init__(self, content): + super(TabNode, self).__init__() + self.tabnode_components = content + self.tabname = content['tabname'] + +def visit_tab_node(self, node): + divid = node.parent.divid + tabname = node.tabname + + # remove spaces from tabname to allow it to be used as the div id. + res = TABDIV_BEGIN % {'divid':divid, + 'tabname':tabname.replace(" ", "")} + self.body.append(res) + +def depart_tab_node(self,node): + self.body.append(TABDIV_END) + +class TabbedStuffNode(nodes.General, nodes.Element): + '''A TabbedStuffNode contains one or more TabNodes''' + def __init__(self,content): + super(TabbedStuffNode,self).__init__() + self.tabbed_stuff_components = content + self.divid = content['divid'] + +def visit_tabbedstuff_node(self, node): + divid = node.divid + + # this is all the child tab nodes + tabs = node.traverse(include_self=False, descend=True, condition=TabNode) + + res = BEGIN % {'divid':divid} + res += TABLIST_BEGIN + + # make the tab list (
        ). + # tabfriendlyname can contain spaces and will be displayed as the name of the tab. + # tabname is the same as tabfriendlyname but with spaces removed, so it can be + # used as the div id. + for tab in tabs: + res += TABLIST_ELEMENT % {'divid':divid, + 'tabfriendlyname':tab.tabname, + 'tabname':tab.tabname.replace(" ", "")} + + res += TABLIST_END #
      + res += TABCONTENT_BEGIN + + self.body.append(res) + + +def depart_tabbedstuff_node(self,node): + divid = node.divid + + # close the tab plugin div and init the Bootstrap tabs + res = TABCONTENT_END + res += END + + res = res % {'divid':divid} + + self.body.append(res) + + + +class TabDirective(Directive): + required_arguments = 1 # the name of the tab + optional_arguments = 0 + final_argument_whitespace = True + has_content = True + option_spec = {} + + node_class = TabNode + + def run(self): + # Raise an error if the directive does not have contents. + self.assert_has_content() + + # Create the node, to be populated by "nested_parse". + self.options['tabname'] = self.arguments[0] + tab_node = TabNode(self.options) + + # Parse the child nodes (content of the tab) + self.state.nested_parse(self.content, self.content_offset, tab_node) + return [tab_node] + +class TabbedStuffDirective(Directive): + required_arguments = 1 # the div to put the tabbed exhibit in + optional_arguments = 0 + final_argument_whitespace = True + has_content = True + + def run(self): + # Raise an error if the directive does not have contents. + self.assert_has_content() + + self.options['divid'] = self.arguments[0] + + # Create the node, to be populated by "nested_parse". + tabbedstuff_node = TabbedStuffNode(self.options) + + # Parse the directive contents (should be 1 or more tab directives) + self.state.nested_parse(self.content, self.content_offset, tabbedstuff_node) + return [tabbedstuff_node] + diff --git a/book/modules/luther/sphinx/video/__init__.py b/book/modules/luther/sphinx/video/__init__.py new file mode 100644 index 0000000..a4bb4c0 --- /dev/null +++ b/book/modules/luther/sphinx/video/__init__.py @@ -0,0 +1,2 @@ + +from .video import * diff --git a/book/modules/luther/sphinx/video/video.py b/book/modules/luther/sphinx/video/video.py new file mode 100644 index 0000000..4d5a016 --- /dev/null +++ b/book/modules/luther/sphinx/video/video.py @@ -0,0 +1,134 @@ +# Copyright (C) 2011 Bradley N. Miller +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +__author__ = 'bmiller' + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive + + +def setup(app): + app.add_directive('video',Video) + app.add_stylesheet('video.css') + +CODE = """\ + + +
      +
      +
      + +
      +""" + +POPUP = """\ + + +""" + +INLINE = """\ + +""" +SOURCE = """""" + + +class Video(Directive): + required_arguments = 1 + optional_arguments = 1 + final_argument_whitespace = True + has_content = True + option_spec = {'controls':directives.flag, + 'loop': directives.flag, + 'thumb': directives.uri, + 'preload': directives.flag + } + + def run(self): + """ + process the video directive and generate html for output. + :param self: + :return: + """ + mimeMap = {'mov':'mp4','webm':'webm', 'm4v':'m4v'} + + sources = [SOURCE % (directives.uri(line),mimeMap[line[line.rindex(".")+1:]]) for line in self.content] + self.options['divid'] = self.arguments[0] + if 'controls' in self.options: + self.options['controls'] = 'controls' + if 'loop' in self.options: + self.options['loop'] = 'loop' + else: + self.options['loop'] = '' + + if 'preload' in self.options: + self.options['preload'] = 'preload="auto"' + else: + self.options['preload'] = 'preload="none"' + + self.options['sources'] = "\n ".join(sources) + res = CODE % self.options + if 'popup' in self.options: + res += POPUP % self.options + else: + res += INLINE % self.options + return [nodes.raw('',res , format='html')] + + + +source = """\ +This is some text. + +.. video:: divid + :controls: + :thumb: _static/turtlestill.png + :loop: + + http://knuth.luther.edu/~bmiller/foo.mov + http://knuth.luther.edu/~bmiller/foo.webm + +This is some more text. +""" + +if __name__ == '__main__': + from docutils.core import publish_parts + + directives.register_directive('video',Video) + + doc_parts = publish_parts(source, + settings_overrides={'output_encoding': 'utf8', + 'initial_header_level': 2}, + writer_name="html") + + print doc_parts['html_body'] diff --git a/book/pavement.py b/book/pavement.py new file mode 100644 index 0000000..1504c83 --- /dev/null +++ b/book/pavement.py @@ -0,0 +1,90 @@ +import paver +from paver.easy import * +import paver.setuputils +paver.setuputils.install_distutils_tasks() +import os, sys +import datetime + +from sphinxcontrib import paverutils + +sys.path.append(os.getcwd()) + +######## CHANGE THIS ########## +project_name = 'template' +############################### + +master_url = 'http://interactivepython.org' +master_app = 'runestone' + +options( + sphinx = Bunch(docroot=".",), + + build = Bunch( + builddir="build", + sourcedir="_sources", + outdir="build", + confdir=".", + template_args={'course_id':project_name, + 'login_required':'false', + 'appname':master_app, + 'loglevel':10, + 'course_url':master_url } + ) +) + +if project_name == "": + print "Please edit pavement.py and give your project a name" + exit() + +@task +@cmdopts([ + ('all','a','rebuild everything'), + ('outputdir=', 'o', 'output static files here'), + ('masterurl=', 'u', 'override the default master url'), + ('masterapp=', 'p', 'override the default master app'), + ('slides','s','Use heiroglyph to build slides') +]) +def build(options): + if 'all' in options.build: + options['force_all'] = True + options['freshenv'] = True + + if 'outputdir' in options.build: + options.build.outdir = options.build.outputdir + + if 'masterurl' in options.build: + options.build.template_args['course_url'] = options.build.masterurl + + if 'masterapp' in options.build: + options.build.template_args['appname'] = options.build.masterapp + + if 'slides' in options.build: + options.sphinx.builder = 'slides' + print 'Building into ', options.build.outdir + paverutils.run_sphinx(options,'build') + + +@task +def setup_github_pages(options): + if sys.version > '3': + repo = input("paste your repo URL here: ") + else: + repo = raw_input("paste your repo URL here: ") + os.chdir(options.build.builddir) + sh("git init") + sh("git remote add origin %s " % repo) + sh("git branch gh-pages") + sh("git checkout gh-pages") # need git 1.8+ to do git checkout -b gh-pages + sh("touch .nojekyll") + sh("git add .nojekyll") + sh("git commit -m 'Create repo and gh-pages branch'") + sh("git push --set-upstream origin gh-pages") + sh("git push origin gh-pages") + +@task +def deploy(options): + os.chdir(options.build.builddir) + sh("git add .") + sh("git commit -m 'New Build on: %s'" % datetime.datetime.now()) + sh("git push") + \ No newline at end of file