From 0c8f7820d24942e818e877b5732c816af99b6041 Mon Sep 17 00:00:00 2001 From: Gryllida A Date: Mon, 14 Jan 2013 21:51:04 +1030 Subject: [PATCH] first commit --- .gitignore | 2 + MANIFEST | 22 + MANIFEST.SKIP | 13 + Makefile.PL | 21 + README.md | 4 + bin/app.pl | 5 + bin/update_db.pl | 108 + config.yml.dist | 53 + environments/development.yml | 27 + environments/production.yml | 17 + lib/Wnstats.pm | 69 + public/404.html | 18 + public/500.html | 18 + public/css/error.css | 70 + public/css/style.css | 189 + public/dispatch.cgi | 15 + public/dispatch.fcgi | 17 + public/favicon.ico | Bin 0 -> 1406 bytes public/images/perldancer-bg.jpg | Bin 0 -> 7125 bytes public/images/perldancer.jpg | Bin 0 -> 2240 bytes public/javascripts/jqplot/MIT-LICENSE.txt | 21 + public/javascripts/jqplot/README.txt | 77 + public/javascripts/jqplot/changes.txt | 395 + public/javascripts/jqplot/copyright.txt | 56 + .../jqplot/docs/files/MIT-LICENSE-txt.html | 39 + .../javascripts/jqplot/docs/files/changes-txt.html | 39 + .../javascripts/jqplot/docs/files/gpl-2-0-txt.html | 39 + .../jqplot/docs/files/images/background.jpg | Bin 0 -> 1101 bytes .../jqplot/docs/files/images/basicline.png | Bin 0 -> 17024 bytes .../jqplot/docs/files/images/basiclogaxis.png | Bin 0 -> 19902 bytes .../jqplot/docs/files/images/basiclogoptions.png | Bin 0 -> 17207 bytes .../jqplot/docs/files/images/basicoptions.png | Bin 0 -> 19864 bytes .../jqplot/docs/files/images/dualaxis.png | Bin 0 -> 29672 bytes .../javascripts/jqplot/docs/files/images/logo.jpg | Bin 0 -> 14632 bytes .../jqplot/docs/files/images/navdocs.png | Bin 0 -> 996 bytes .../jqplot/docs/files/images/navdocsover.png | Bin 0 -> 1006 bytes .../jqplot/docs/files/images/navdownload.png | Bin 0 -> 1236 bytes .../jqplot/docs/files/images/navdownloadover.png | Bin 0 -> 1265 bytes .../jqplot/docs/files/images/navexamples.png | Bin 0 -> 1308 bytes .../jqplot/docs/files/images/navexamplesover.png | Bin 0 -> 1332 bytes .../jqplot/docs/files/images/navhome.png | Bin 0 -> 858 bytes .../jqplot/docs/files/images/navhomeover.png | Bin 0 -> 886 bytes .../javascripts/jqplot/docs/files/images/new.png | Bin 0 -> 13750 bytes .../jqplot/docs/files/images/sample3.png | Bin 0 -> 44781 bytes .../jqplot/docs/files/images/samplesm.png | Bin 0 -> 20874 bytes .../jqplot/docs/files/jqPlotCssStyling-txt.html | 39 + .../jqplot/docs/files/jqPlotOptions-txt.html | 292 + .../docs/files/jqplot-axisLabelRenderer-js.html | 47 + .../docs/files/jqplot-axisTickRenderer-js.html | 73 + .../docs/files/jqplot-canvasGridRenderer-js.html | 39 + .../jqplot/docs/files/jqplot-core-js.html | 389 + .../docs/files/jqplot-divTitleRenderer-js.html | 39 + .../jqplot/docs/files/jqplot-lineRenderer-js.html | 69 + .../docs/files/jqplot-linearAxisRenderer-js.html | 61 + .../docs/files/jqplot-markerRenderer-js.html | 65 + .../docs/files/jqplot-shadowRenderer-js.html | 61 + .../jqplot/docs/files/jqplot-shapeRenderer-js.html | 65 + .../jqplot/docs/files/jqplot-themeEngine-js.html | 191 + .../jqplot/docs/files/jqplot-toImage-js.html | 39 + .../jqplot/docs/files/optionsTutorial-txt.html | 120 + .../plugins/jqplot-BezierCurveRenderer-js.html | 45 + .../docs/files/plugins/jqplot-barRenderer-js.html | 69 + .../files/plugins/jqplot-blockRenderer-js.html | 53 + .../files/plugins/jqplot-bubbleRenderer-js.html | 71 + .../plugins/jqplot-canvasAxisLabelRenderer-js.html | 63 + .../plugins/jqplot-canvasAxisTickRenderer-js.html | 79 + .../files/plugins/jqplot-canvasOverlay-js.html | 113 + .../plugins/jqplot-categoryAxisRenderer-js.html | 46 + .../docs/files/plugins/jqplot-ciParser-js.html | 39 + .../docs/files/plugins/jqplot-cursor-js.html | 93 + .../files/plugins/jqplot-dateAxisRenderer-js.html | 101 + .../files/plugins/jqplot-donutRenderer-js.html | 98 + .../docs/files/plugins/jqplot-dragable-js.html | 45 + .../plugins/jqplot-enhancedLegendRenderer-js.html | 51 + .../files/plugins/jqplot-funnelRenderer-js.html | 87 + .../docs/files/plugins/jqplot-highlighter-js.html | 80 + .../files/plugins/jqplot-logAxisRenderer-js.html | 47 + .../files/plugins/jqplot-mekkoAxisRenderer-js.html | 49 + .../files/plugins/jqplot-mekkoRenderer-js.html | 62 + .../plugins/jqplot-meterGaugeRenderer-js.html | 103 + .../docs/files/plugins/jqplot-ohlcRenderer-js.html | 65 + .../docs/files/plugins/jqplot-pieRenderer-js.html | 93 + .../docs/files/plugins/jqplot-pointLabels-js.html | 72 + .../plugins/jqplot-pyramidAxisRenderer-js.html | 49 + .../plugins/jqplot-pyramidGridRenderer-js.html | 39 + .../files/plugins/jqplot-pyramidRenderer-js.html | 55 + .../docs/files/plugins/jqplot-trendline-js.html | 67 + .../javascripts/jqplot/docs/files/usage-txt.html | 58 + public/javascripts/jqplot/docs/index.html | 1 + public/javascripts/jqplot/docs/index/Classes.html | 70 + public/javascripts/jqplot/docs/index/Files.html | 34 + .../javascripts/jqplot/docs/index/Functions.html | 70 + public/javascripts/jqplot/docs/index/General.html | 42 + public/javascripts/jqplot/docs/index/General2.html | 42 + public/javascripts/jqplot/docs/index/General3.html | 42 + public/javascripts/jqplot/docs/index/General4.html | 46 + public/javascripts/jqplot/docs/index/General5.html | 50 + public/javascripts/jqplot/docs/index/General6.html | 34 + public/javascripts/jqplot/docs/index/General7.html | 58 + public/javascripts/jqplot/docs/index/Hooks.html | 46 + .../javascripts/jqplot/docs/index/Properties.html | 42 + .../javascripts/jqplot/docs/index/Properties2.html | 42 + .../javascripts/jqplot/docs/index/Properties3.html | 46 + .../javascripts/jqplot/docs/index/Properties4.html | 50 + .../javascripts/jqplot/docs/index/Properties5.html | 34 + .../javascripts/jqplot/docs/index/Properties6.html | 58 + public/javascripts/jqplot/docs/javascript/main.js | 836 ++ .../jqplot/docs/javascript/searchdata.js | 182 + .../javascripts/jqplot/docs/search/ClassesA.html | 20 + .../javascripts/jqplot/docs/search/ClassesD.html | 20 + .../javascripts/jqplot/docs/search/ClassesG.html | 20 + .../javascripts/jqplot/docs/search/ClassesH.html | 20 + .../javascripts/jqplot/docs/search/ClassesJ.html | 20 + .../javascripts/jqplot/docs/search/ClassesL.html | 20 + .../javascripts/jqplot/docs/search/ClassesS.html | 20 + .../jqplot/docs/search/ClassesSymbols.html | 20 + .../javascripts/jqplot/docs/search/ClassesT.html | 20 + .../javascripts/jqplot/docs/search/ClassesV.html | 20 + public/javascripts/jqplot/docs/search/FilesJ.html | 20 + .../javascripts/jqplot/docs/search/FunctionsC.html | 20 + .../javascripts/jqplot/docs/search/FunctionsD.html | 20 + .../javascripts/jqplot/docs/search/FunctionsG.html | 20 + .../javascripts/jqplot/docs/search/FunctionsI.html | 20 + .../javascripts/jqplot/docs/search/FunctionsM.html | 20 + .../javascripts/jqplot/docs/search/FunctionsN.html | 20 + .../javascripts/jqplot/docs/search/FunctionsQ.html | 20 + .../javascripts/jqplot/docs/search/FunctionsR.html | 20 + .../javascripts/jqplot/docs/search/FunctionsS.html | 20 + .../javascripts/jqplot/docs/search/FunctionsZ.html | 20 + .../javascripts/jqplot/docs/search/GeneralA.html | 20 + .../javascripts/jqplot/docs/search/GeneralB.html | 20 + .../javascripts/jqplot/docs/search/GeneralC.html | 20 + .../javascripts/jqplot/docs/search/GeneralD.html | 20 + .../javascripts/jqplot/docs/search/GeneralE.html | 20 + .../javascripts/jqplot/docs/search/GeneralF.html | 20 + .../javascripts/jqplot/docs/search/GeneralG.html | 20 + .../javascripts/jqplot/docs/search/GeneralH.html | 20 + .../javascripts/jqplot/docs/search/GeneralI.html | 20 + .../javascripts/jqplot/docs/search/GeneralJ.html | 20 + .../javascripts/jqplot/docs/search/GeneralL.html | 20 + .../javascripts/jqplot/docs/search/GeneralM.html | 20 + .../javascripts/jqplot/docs/search/GeneralN.html | 20 + .../javascripts/jqplot/docs/search/GeneralO.html | 20 + .../javascripts/jqplot/docs/search/GeneralP.html | 20 + .../javascripts/jqplot/docs/search/GeneralQ.html | 20 + .../javascripts/jqplot/docs/search/GeneralR.html | 20 + .../javascripts/jqplot/docs/search/GeneralS.html | 20 + .../jqplot/docs/search/GeneralSymbols.html | 20 + .../javascripts/jqplot/docs/search/GeneralT.html | 20 + .../javascripts/jqplot/docs/search/GeneralU.html | 20 + .../javascripts/jqplot/docs/search/GeneralV.html | 20 + .../javascripts/jqplot/docs/search/GeneralW.html | 20 + .../javascripts/jqplot/docs/search/GeneralX.html | 20 + .../javascripts/jqplot/docs/search/GeneralY.html | 20 + .../javascripts/jqplot/docs/search/GeneralZ.html | 20 + public/javascripts/jqplot/docs/search/HooksA.html | 20 + public/javascripts/jqplot/docs/search/HooksE.html | 20 + public/javascripts/jqplot/docs/search/HooksJ.html | 20 + public/javascripts/jqplot/docs/search/HooksP.html | 20 + .../javascripts/jqplot/docs/search/NoResults.html | 15 + .../jqplot/docs/search/PropertiesA.html | 20 + .../jqplot/docs/search/PropertiesB.html | 20 + .../jqplot/docs/search/PropertiesC.html | 20 + .../jqplot/docs/search/PropertiesD.html | 20 + .../jqplot/docs/search/PropertiesE.html | 20 + .../jqplot/docs/search/PropertiesF.html | 20 + .../jqplot/docs/search/PropertiesG.html | 20 + .../jqplot/docs/search/PropertiesH.html | 20 + .../jqplot/docs/search/PropertiesI.html | 20 + .../jqplot/docs/search/PropertiesL.html | 20 + .../jqplot/docs/search/PropertiesM.html | 20 + .../jqplot/docs/search/PropertiesN.html | 20 + .../jqplot/docs/search/PropertiesO.html | 20 + .../jqplot/docs/search/PropertiesP.html | 20 + .../jqplot/docs/search/PropertiesR.html | 20 + .../jqplot/docs/search/PropertiesS.html | 20 + .../jqplot/docs/search/PropertiesT.html | 20 + .../jqplot/docs/search/PropertiesU.html | 20 + .../jqplot/docs/search/PropertiesV.html | 20 + .../jqplot/docs/search/PropertiesW.html | 20 + .../jqplot/docs/search/PropertiesX.html | 20 + .../jqplot/docs/search/PropertiesY.html | 20 + .../jqplot/docs/search/PropertiesZ.html | 20 + public/javascripts/jqplot/docs/styles/1.css | 767 ++ public/javascripts/jqplot/docs/styles/2.css | 174 + public/javascripts/jqplot/docs/styles/main.css | 2 + public/javascripts/jqplot/examples/KCPsample4.csv | 25 + public/javascripts/jqplot/examples/ages.json | 5 + public/javascripts/jqplot/examples/ages.json.bak | 20 + public/javascripts/jqplot/examples/ajax-loader.gif | Bin 0 -> 3208 bytes public/javascripts/jqplot/examples/area.html | 229 + .../jqplot/examples/axisLabelTests.html | 157 + .../jqplot/examples/axisLabelsRotatedText.html | 229 + .../jqplot/examples/axisScalingForceTickAt.html | 242 + public/javascripts/jqplot/examples/bandedLine.html | 310 + public/javascripts/jqplot/examples/bar-charts.html | 219 + .../jqplot/examples/barLineAnimated.html | 165 + public/javascripts/jqplot/examples/barTest.html | 299 + .../javascripts/jqplot/examples/bezierCurve.html | 125 + public/javascripts/jqplot/examples/blockPlot.html | 199 + .../javascripts/jqplot/examples/bubble-plots.html | 213 + .../javascripts/jqplot/examples/bubbleChart.html | 264 + .../jqplot/examples/candlestick-charts.html | 209 + .../javascripts/jqplot/examples/candlestick.html | 322 + .../jqplot/examples/canvas-overlay.html | 231 + .../javascripts/jqplot/examples/colorpicker/README | 140 + .../javascripts/jqplot/examples/colorpicker/TODO | 14 + .../examples/colorpicker/images/bar-alpha.png | Bin 0 -> 2195 bytes .../examples/colorpicker/images/bar-opacity.png | Bin 0 -> 134 bytes .../examples/colorpicker/images/bar-pointer.png | Bin 0 -> 198 bytes .../jqplot/examples/colorpicker/images/bar.png | Bin 0 -> 382 bytes .../examples/colorpicker/images/map-opacity.png | Bin 0 -> 139 bytes .../examples/colorpicker/images/map-pointer.png | Bin 0 -> 344 bytes .../jqplot/examples/colorpicker/images/map.png | Bin 0 -> 78245 bytes .../colorpicker/images/preview-opacity.png | Bin 0 -> 135 bytes .../examples/colorpicker/images/ui-colorpicker.png | Bin 0 -> 494 bytes .../jqplot/examples/colorpicker/index.html | 85 + .../examples/colorpicker/jquery.colorpicker.css | 129 + .../examples/colorpicker/jquery.colorpicker.js | 1654 +++ .../jqplot/examples/cursor-highlighter.html | 137 + .../examples/customHighlighterCursorTrendline.html | 104 + .../jqplot/examples/dashboardWidget.html | 212 + .../javascripts/jqplot/examples/dashedLines.html | 227 + .../jqplot/examples/data-renderers.html | 144 + public/javascripts/jqplot/examples/date-axes.html | 107 + .../jqplot/examples/dateAxisLogAxisZooming.html | 101 + .../jqplot/examples/dateAxisRenderer.html | 292 + public/javascripts/jqplot/examples/example.js | 114 + public/javascripts/jqplot/examples/example.min.js | 1 + public/javascripts/jqplot/examples/examples.css | 140 + .../javascripts/jqplot/examples/examples.min.css | 1 + .../jqplot/examples/fillBetweenLines.html | 134 + .../jqplot/examples/hiddenPlotsInTabs.html | 225 + public/javascripts/jqplot/examples/images/logo.jpg | Bin 0 -> 14632 bytes .../jqplot/examples/images/ui-colorpicker.png | Bin 0 -> 494 bytes public/javascripts/jqplot/examples/index.html | 108 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../smoothness/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../smoothness/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../smoothness/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../smoothness/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../smoothness/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../jquery-ui/css/smoothness/jquery-ui.css | 568 + .../jquery-ui/css/smoothness/jquery-ui.min.css | 1 + .../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 .../images/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_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 .../css/ui-lightness/jquery-ui-1.9pre.css | 612 + .../css/ui-lightness/jquery-ui-1.9pre.min.css | 10 + .../jquery-ui/css/ui-lightness/jquery-ui.css | 568 + .../jquery-ui/css/ui-lightness/jquery-ui.min.css | 1 + .../examples/jquery-ui/js/jquery-ui-1.9pre.min.js | 473 + .../jqplot/examples/jquery-ui/js/jquery-ui.js | 11767 +++++++++++++++++++ .../jqplot/examples/jquery-ui/js/jquery-ui.min.js | 791 ++ .../examples/jquery-ui/js/jquery.effects.blind.js | 80 + .../jquery-ui/js/jquery.effects.blind.min.js | 14 + .../examples/jquery-ui/js/jquery.effects.core.js | 890 ++ .../jquery-ui/js/jquery.effects.core.min.js | 32 + public/javascripts/jqplot/examples/jquery.print.js | 103 + .../jqplot/examples/jquery.printElement.min.js | 28 + public/javascripts/jqplot/examples/jsondata.txt | 1 + public/javascripts/jqplot/examples/kcp.print.js | 136 + public/javascripts/jqplot/examples/kcp_area.html | 284 + public/javascripts/jqplot/examples/kcp_area2.html | 217 + public/javascripts/jqplot/examples/kcp_area2.json | 2 + public/javascripts/jqplot/examples/kcp_cdf.html | 351 + public/javascripts/jqplot/examples/kcp_engel.html | 256 + public/javascripts/jqplot/examples/kcp_lorenz.html | 528 + public/javascripts/jqplot/examples/kcp_pdf.html | 387 + .../javascripts/jqplot/examples/kcp_pyramid.html | 590 + .../javascripts/jqplot/examples/kcp_pyramid2.html | 578 + .../jqplot/examples/kcp_pyramid_by_age.html | 859 ++ .../jqplot/examples/kcp_pyramid_by_age.php | 862 ++ .../javascripts/jqplot/examples/kcp_quintiles.html | 663 ++ .../javascripts/jqplot/examples/line-charts.html | 193 + .../javascripts/jqplot/examples/mekkoCharts.html | 269 + .../jqplot/examples/mekkoCharts.php.orig | 232 + public/javascripts/jqplot/examples/meritOrder.html | 103 + public/javascripts/jqplot/examples/meterGauge.html | 179 + .../jqplot/examples/multipleBarColors.html | 131 + public/javascripts/jqplot/examples/nav.inc | 40 + .../jqplot/examples/pie-donut-charts.html | 160 + public/javascripts/jqplot/examples/pieTest.html | 187 + public/javascripts/jqplot/examples/pieTest2.js | 80 + public/javascripts/jqplot/examples/pieTest4.html | 258 + .../javascripts/jqplot/examples/point-labels.html | 193 + public/javascripts/jqplot/examples/quintiles.json | 348 + .../javascripts/jqplot/examples/resizablePlot.html | 196 + .../jqplot/examples/resizablePlot.php.orig | 164 + .../jqplot/examples/rotated-tick-labels.html | 216 + .../jqplot/examples/rotatedTickLabelsZoom.html | 118 + .../jqplot/examples/selectorSyntax.html | 157 + .../javascripts/jqplot/examples/smoothedLine.html | 137 + .../jqplot/examples/syntaxhighlighter/LGPL-LICENSE | 165 + .../jqplot/examples/syntaxhighlighter/MIT-LICENSE | 20 + .../syntaxhighlighter/scripts/shAutoloader.js | 17 + .../syntaxhighlighter/scripts/shAutoloader.min.js | 1 + .../syntaxhighlighter/scripts/shBrushJScript.js | 52 + .../scripts/shBrushJScript.min.js | 1 + .../syntaxhighlighter/scripts/shBrushXml.js | 69 + .../syntaxhighlighter/scripts/shBrushXml.min.js | 1 + .../examples/syntaxhighlighter/scripts/shCore.js | 17 + .../syntaxhighlighter/scripts/shCore.min.js | 1 + .../examples/syntaxhighlighter/styles/shCore.css | 226 + .../syntaxhighlighter/styles/shCore.min.css | 1 + .../syntaxhighlighter/styles/shCoreDefault.css | 328 + .../syntaxhighlighter/styles/shCoreDefault.min.css | 1 + .../syntaxhighlighter/styles/shThemeDefault.css | 117 + .../styles/shThemeDefault.min.css | 1 + .../syntaxhighlighter/styles/shThemejqPlot.css | 138 + .../syntaxhighlighter/styles/shThemejqPlot.min.css | 1 + public/javascripts/jqplot/examples/theming.html | 519 + public/javascripts/jqplot/examples/topbanner.inc | 9 + public/javascripts/jqplot/examples/waterfall.html | 162 + .../javascripts/jqplot/examples/waterfall.php.orig | 126 + public/javascripts/jqplot/examples/waterfall2.html | 231 + public/javascripts/jqplot/examples/yahooData.js | 1807 +++ .../javascripts/jqplot/examples/yahooData.min.js | 1 + public/javascripts/jqplot/examples/zoom1.html | 149 + .../javascripts/jqplot/examples/zoomOptions.html | 176 + public/javascripts/jqplot/examples/zoomProxy.html | 161 + public/javascripts/jqplot/examples/zooming.html | 209 + public/javascripts/jqplot/excanvas.js | 1438 +++ public/javascripts/jqplot/excanvas.min.js | 57 + public/javascripts/jqplot/gpl-2.0.txt | 280 + public/javascripts/jqplot/jqPlotCssStyling.txt | 53 + public/javascripts/jqplot/jqPlotOptions.txt | 276 + public/javascripts/jqplot/jquery.jqplot.css | 259 + public/javascripts/jqplot/jquery.jqplot.js | 11381 ++++++++++++++++++ public/javascripts/jqplot/jquery.jqplot.min.css | 1 + public/javascripts/jqplot/jquery.jqplot.min.js | 57 + public/javascripts/jqplot/jquery.js | 9046 ++++++++++++++ public/javascripts/jqplot/jquery.min.js | 4 + public/javascripts/jqplot/optionsTutorial.txt | 240 + .../jqplot/plugins/jqplot.BezierCurveRenderer.js | 313 + .../plugins/jqplot.BezierCurveRenderer.min.js | 57 + .../jqplot/plugins/jqplot.barRenderer.js | 797 ++ .../jqplot/plugins/jqplot.barRenderer.min.js | 57 + .../jqplot/plugins/jqplot.blockRenderer.js | 235 + .../jqplot/plugins/jqplot.blockRenderer.min.js | 57 + .../jqplot/plugins/jqplot.bubbleRenderer.js | 759 ++ .../jqplot/plugins/jqplot.bubbleRenderer.min.js | 57 + .../plugins/jqplot.canvasAxisLabelRenderer.js | 203 + .../plugins/jqplot.canvasAxisLabelRenderer.min.js | 57 + .../plugins/jqplot.canvasAxisTickRenderer.js | 243 + .../plugins/jqplot.canvasAxisTickRenderer.min.js | 57 + .../jqplot/plugins/jqplot.canvasOverlay.js | 865 ++ .../jqplot/plugins/jqplot.canvasOverlay.min.js | 57 + .../jqplot/plugins/jqplot.canvasTextRenderer.js | 449 + .../plugins/jqplot.canvasTextRenderer.min.js | 57 + .../jqplot/plugins/jqplot.categoryAxisRenderer.js | 673 ++ .../plugins/jqplot.categoryAxisRenderer.min.js | 57 + .../javascripts/jqplot/plugins/jqplot.ciParser.js | 116 + .../jqplot/plugins/jqplot.ciParser.min.js | 57 + public/javascripts/jqplot/plugins/jqplot.cursor.js | 1108 ++ .../jqplot/plugins/jqplot.cursor.min.js | 57 + .../jqplot/plugins/jqplot.dateAxisRenderer.js | 737 ++ .../jqplot/plugins/jqplot.dateAxisRenderer.min.js | 57 + .../jqplot/plugins/jqplot.donutRenderer.js | 805 ++ .../jqplot/plugins/jqplot.donutRenderer.min.js | 57 + .../javascripts/jqplot/plugins/jqplot.dragable.js | 225 + .../jqplot/plugins/jqplot.dragable.min.js | 57 + .../plugins/jqplot.enhancedLegendRenderer.js | 305 + .../plugins/jqplot.enhancedLegendRenderer.min.js | 57 + .../jqplot/plugins/jqplot.funnelRenderer.js | 943 ++ .../jqplot/plugins/jqplot.funnelRenderer.min.js | 57 + .../jqplot/plugins/jqplot.highlighter.js | 465 + .../jqplot/plugins/jqplot.highlighter.min.js | 57 + public/javascripts/jqplot/plugins/jqplot.json2.js | 475 + .../javascripts/jqplot/plugins/jqplot.json2.min.js | 57 + .../jqplot/plugins/jqplot.logAxisRenderer.js | 529 + .../jqplot/plugins/jqplot.logAxisRenderer.min.js | 57 + .../jqplot/plugins/jqplot.mekkoAxisRenderer.js | 611 + .../jqplot/plugins/jqplot.mekkoAxisRenderer.min.js | 57 + .../jqplot/plugins/jqplot.mekkoRenderer.js | 437 + .../jqplot/plugins/jqplot.mekkoRenderer.min.js | 57 + .../jqplot/plugins/jqplot.meterGaugeRenderer.js | 1030 ++ .../plugins/jqplot.meterGaugeRenderer.min.js | 57 + public/javascripts/jqplot/plugins/jqplot.mobile.js | 45 + .../jqplot/plugins/jqplot.mobile.min.js | 57 + .../jqplot/plugins/jqplot.ohlcRenderer.js | 373 + .../jqplot/plugins/jqplot.ohlcRenderer.min.js | 57 + .../jqplot/plugins/jqplot.pieRenderer.js | 904 ++ .../jqplot/plugins/jqplot.pieRenderer.min.js | 57 + .../jqplot/plugins/jqplot.pointLabels.js | 379 + .../jqplot/plugins/jqplot.pointLabels.min.js | 57 + .../jqplot/plugins/jqplot.pyramidAxisRenderer.js | 728 ++ .../plugins/jqplot.pyramidAxisRenderer.min.js | 57 + .../jqplot/plugins/jqplot.pyramidGridRenderer.js | 429 + .../plugins/jqplot.pyramidGridRenderer.min.js | 57 + .../jqplot/plugins/jqplot.pyramidRenderer.js | 514 + .../jqplot/plugins/jqplot.pyramidRenderer.min.js | 57 + .../javascripts/jqplot/plugins/jqplot.trendline.js | 223 + .../jqplot/plugins/jqplot.trendline.min.js | 57 + public/javascripts/jqplot/usage.txt | 126 + public/javascripts/update_chart.js | 89 + some.db | Bin 0 -> 224256 bytes t/001_base.t | 5 + t/002_index_route.t | 10 + views/index.tt | 110 + 417 files changed, 87390 insertions(+) create mode 100644 .gitignore create mode 100644 MANIFEST create mode 100644 MANIFEST.SKIP create mode 100644 Makefile.PL create mode 100644 README.md create mode 100755 bin/app.pl create mode 100644 bin/update_db.pl create mode 100644 config.yml.dist create mode 100644 environments/development.yml create mode 100644 environments/production.yml create mode 100644 lib/Wnstats.pm create mode 100644 public/404.html create mode 100644 public/500.html create mode 100644 public/css/error.css create mode 100644 public/css/style.css create mode 100755 public/dispatch.cgi create mode 100755 public/dispatch.fcgi create mode 100644 public/favicon.ico create mode 100644 public/images/perldancer-bg.jpg create mode 100644 public/images/perldancer.jpg create mode 100644 public/javascripts/jqplot/MIT-LICENSE.txt create mode 100644 public/javascripts/jqplot/README.txt create mode 100644 public/javascripts/jqplot/changes.txt create mode 100644 public/javascripts/jqplot/copyright.txt create mode 100644 public/javascripts/jqplot/docs/files/MIT-LICENSE-txt.html create mode 100644 public/javascripts/jqplot/docs/files/changes-txt.html create mode 100644 public/javascripts/jqplot/docs/files/gpl-2-0-txt.html create mode 100644 public/javascripts/jqplot/docs/files/images/background.jpg create mode 100644 public/javascripts/jqplot/docs/files/images/basicline.png create mode 100644 public/javascripts/jqplot/docs/files/images/basiclogaxis.png create mode 100644 public/javascripts/jqplot/docs/files/images/basiclogoptions.png create mode 100644 public/javascripts/jqplot/docs/files/images/basicoptions.png create mode 100644 public/javascripts/jqplot/docs/files/images/dualaxis.png create mode 100644 public/javascripts/jqplot/docs/files/images/logo.jpg create mode 100644 public/javascripts/jqplot/docs/files/images/navdocs.png create mode 100644 public/javascripts/jqplot/docs/files/images/navdocsover.png create mode 100644 public/javascripts/jqplot/docs/files/images/navdownload.png create mode 100644 public/javascripts/jqplot/docs/files/images/navdownloadover.png create mode 100644 public/javascripts/jqplot/docs/files/images/navexamples.png create mode 100644 public/javascripts/jqplot/docs/files/images/navexamplesover.png create mode 100644 public/javascripts/jqplot/docs/files/images/navhome.png create mode 100644 public/javascripts/jqplot/docs/files/images/navhomeover.png create mode 100644 public/javascripts/jqplot/docs/files/images/new.png create mode 100644 public/javascripts/jqplot/docs/files/images/sample3.png create mode 100644 public/javascripts/jqplot/docs/files/images/samplesm.png create mode 100644 public/javascripts/jqplot/docs/files/jqPlotCssStyling-txt.html create mode 100644 public/javascripts/jqplot/docs/files/jqPlotOptions-txt.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-axisLabelRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-axisTickRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-canvasGridRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-core-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-divTitleRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-lineRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-linearAxisRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-markerRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-shadowRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-shapeRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-themeEngine-js.html create mode 100644 public/javascripts/jqplot/docs/files/jqplot-toImage-js.html create mode 100644 public/javascripts/jqplot/docs/files/optionsTutorial-txt.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-barRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-ciParser-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-cursor-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-dragable-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-highlighter-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-pointLabels-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html create mode 100644 public/javascripts/jqplot/docs/files/plugins/jqplot-trendline-js.html create mode 100644 public/javascripts/jqplot/docs/files/usage-txt.html create mode 100644 public/javascripts/jqplot/docs/index.html create mode 100644 public/javascripts/jqplot/docs/index/Classes.html create mode 100644 public/javascripts/jqplot/docs/index/Files.html create mode 100644 public/javascripts/jqplot/docs/index/Functions.html create mode 100644 public/javascripts/jqplot/docs/index/General.html create mode 100644 public/javascripts/jqplot/docs/index/General2.html create mode 100644 public/javascripts/jqplot/docs/index/General3.html create mode 100644 public/javascripts/jqplot/docs/index/General4.html create mode 100644 public/javascripts/jqplot/docs/index/General5.html create mode 100644 public/javascripts/jqplot/docs/index/General6.html create mode 100644 public/javascripts/jqplot/docs/index/General7.html create mode 100644 public/javascripts/jqplot/docs/index/Hooks.html create mode 100644 public/javascripts/jqplot/docs/index/Properties.html create mode 100644 public/javascripts/jqplot/docs/index/Properties2.html create mode 100644 public/javascripts/jqplot/docs/index/Properties3.html create mode 100644 public/javascripts/jqplot/docs/index/Properties4.html create mode 100644 public/javascripts/jqplot/docs/index/Properties5.html create mode 100644 public/javascripts/jqplot/docs/index/Properties6.html create mode 100644 public/javascripts/jqplot/docs/javascript/main.js create mode 100644 public/javascripts/jqplot/docs/javascript/searchdata.js create mode 100644 public/javascripts/jqplot/docs/search/ClassesA.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesD.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesG.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesH.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesJ.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesL.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesS.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesSymbols.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesT.html create mode 100644 public/javascripts/jqplot/docs/search/ClassesV.html create mode 100644 public/javascripts/jqplot/docs/search/FilesJ.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsC.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsD.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsG.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsI.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsM.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsN.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsQ.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsR.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsS.html create mode 100644 public/javascripts/jqplot/docs/search/FunctionsZ.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralA.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralB.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralC.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralD.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralE.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralF.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralG.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralH.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralI.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralJ.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralL.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralM.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralN.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralO.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralP.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralQ.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralR.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralS.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralSymbols.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralT.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralU.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralV.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralW.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralX.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralY.html create mode 100644 public/javascripts/jqplot/docs/search/GeneralZ.html create mode 100644 public/javascripts/jqplot/docs/search/HooksA.html create mode 100644 public/javascripts/jqplot/docs/search/HooksE.html create mode 100644 public/javascripts/jqplot/docs/search/HooksJ.html create mode 100644 public/javascripts/jqplot/docs/search/HooksP.html create mode 100644 public/javascripts/jqplot/docs/search/NoResults.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesA.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesB.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesC.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesD.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesE.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesF.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesG.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesH.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesI.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesL.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesM.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesN.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesO.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesP.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesR.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesS.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesT.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesU.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesV.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesW.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesX.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesY.html create mode 100644 public/javascripts/jqplot/docs/search/PropertiesZ.html create mode 100644 public/javascripts/jqplot/docs/styles/1.css create mode 100644 public/javascripts/jqplot/docs/styles/2.css create mode 100644 public/javascripts/jqplot/docs/styles/main.css create mode 100644 public/javascripts/jqplot/examples/KCPsample4.csv create mode 100644 public/javascripts/jqplot/examples/ages.json create mode 100644 public/javascripts/jqplot/examples/ages.json.bak create mode 100644 public/javascripts/jqplot/examples/ajax-loader.gif create mode 100644 public/javascripts/jqplot/examples/area.html create mode 100644 public/javascripts/jqplot/examples/axisLabelTests.html create mode 100644 public/javascripts/jqplot/examples/axisLabelsRotatedText.html create mode 100644 public/javascripts/jqplot/examples/axisScalingForceTickAt.html create mode 100644 public/javascripts/jqplot/examples/bandedLine.html create mode 100644 public/javascripts/jqplot/examples/bar-charts.html create mode 100644 public/javascripts/jqplot/examples/barLineAnimated.html create mode 100644 public/javascripts/jqplot/examples/barTest.html create mode 100644 public/javascripts/jqplot/examples/bezierCurve.html create mode 100644 public/javascripts/jqplot/examples/blockPlot.html create mode 100644 public/javascripts/jqplot/examples/bubble-plots.html create mode 100644 public/javascripts/jqplot/examples/bubbleChart.html create mode 100644 public/javascripts/jqplot/examples/candlestick-charts.html create mode 100644 public/javascripts/jqplot/examples/candlestick.html create mode 100644 public/javascripts/jqplot/examples/canvas-overlay.html create mode 100644 public/javascripts/jqplot/examples/colorpicker/README create mode 100644 public/javascripts/jqplot/examples/colorpicker/TODO create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/bar-alpha.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/bar-opacity.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/bar-pointer.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/bar.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/map-opacity.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/map-pointer.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/map.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/preview-opacity.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/images/ui-colorpicker.png create mode 100644 public/javascripts/jqplot/examples/colorpicker/index.html create mode 100644 public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.css create mode 100644 public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.js create mode 100644 public/javascripts/jqplot/examples/cursor-highlighter.html create mode 100644 public/javascripts/jqplot/examples/customHighlighterCursorTrendline.html create mode 100644 public/javascripts/jqplot/examples/dashboardWidget.html create mode 100644 public/javascripts/jqplot/examples/dashedLines.html create mode 100644 public/javascripts/jqplot/examples/data-renderers.html create mode 100644 public/javascripts/jqplot/examples/date-axes.html create mode 100644 public/javascripts/jqplot/examples/dateAxisLogAxisZooming.html create mode 100644 public/javascripts/jqplot/examples/dateAxisRenderer.html create mode 100644 public/javascripts/jqplot/examples/example.js create mode 100644 public/javascripts/jqplot/examples/example.min.js create mode 100644 public/javascripts/jqplot/examples/examples.css create mode 100644 public/javascripts/jqplot/examples/examples.min.css create mode 100644 public/javascripts/jqplot/examples/fillBetweenLines.html create mode 100644 public/javascripts/jqplot/examples/hiddenPlotsInTabs.html create mode 100644 public/javascripts/jqplot/examples/images/logo.jpg create mode 100644 public/javascripts/jqplot/examples/images/ui-colorpicker.png create mode 100644 public/javascripts/jqplot/examples/index.html create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css create mode 100644 public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.js create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.min.js create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.js create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.js create mode 100644 public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js create mode 100644 public/javascripts/jqplot/examples/jquery.print.js create mode 100644 public/javascripts/jqplot/examples/jquery.printElement.min.js create mode 100644 public/javascripts/jqplot/examples/jsondata.txt create mode 100644 public/javascripts/jqplot/examples/kcp.print.js create mode 100644 public/javascripts/jqplot/examples/kcp_area.html create mode 100644 public/javascripts/jqplot/examples/kcp_area2.html create mode 100644 public/javascripts/jqplot/examples/kcp_area2.json create mode 100644 public/javascripts/jqplot/examples/kcp_cdf.html create mode 100644 public/javascripts/jqplot/examples/kcp_engel.html create mode 100644 public/javascripts/jqplot/examples/kcp_lorenz.html create mode 100644 public/javascripts/jqplot/examples/kcp_pdf.html create mode 100644 public/javascripts/jqplot/examples/kcp_pyramid.html create mode 100644 public/javascripts/jqplot/examples/kcp_pyramid2.html create mode 100644 public/javascripts/jqplot/examples/kcp_pyramid_by_age.html create mode 100644 public/javascripts/jqplot/examples/kcp_pyramid_by_age.php create mode 100644 public/javascripts/jqplot/examples/kcp_quintiles.html create mode 100644 public/javascripts/jqplot/examples/line-charts.html create mode 100644 public/javascripts/jqplot/examples/mekkoCharts.html create mode 100644 public/javascripts/jqplot/examples/mekkoCharts.php.orig create mode 100644 public/javascripts/jqplot/examples/meritOrder.html create mode 100644 public/javascripts/jqplot/examples/meterGauge.html create mode 100644 public/javascripts/jqplot/examples/multipleBarColors.html create mode 100644 public/javascripts/jqplot/examples/nav.inc create mode 100644 public/javascripts/jqplot/examples/pie-donut-charts.html create mode 100644 public/javascripts/jqplot/examples/pieTest.html create mode 100644 public/javascripts/jqplot/examples/pieTest2.js create mode 100644 public/javascripts/jqplot/examples/pieTest4.html create mode 100644 public/javascripts/jqplot/examples/point-labels.html create mode 100644 public/javascripts/jqplot/examples/quintiles.json create mode 100644 public/javascripts/jqplot/examples/resizablePlot.html create mode 100644 public/javascripts/jqplot/examples/resizablePlot.php.orig create mode 100644 public/javascripts/jqplot/examples/rotated-tick-labels.html create mode 100644 public/javascripts/jqplot/examples/rotatedTickLabelsZoom.html create mode 100644 public/javascripts/jqplot/examples/selectorSyntax.html create mode 100644 public/javascripts/jqplot/examples/smoothedLine.html create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/LGPL-LICENSE create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/MIT-LICENSE create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shAutoloader.min.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shBrushJScript.min.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shBrushXml.min.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shCore.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/scripts/shCore.min.js create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shCore.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shCore.min.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shCoreDefault.min.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shThemeDefault.min.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.css create mode 100644 public/javascripts/jqplot/examples/syntaxhighlighter/styles/shThemejqPlot.min.css create mode 100644 public/javascripts/jqplot/examples/theming.html create mode 100644 public/javascripts/jqplot/examples/topbanner.inc create mode 100644 public/javascripts/jqplot/examples/waterfall.html create mode 100644 public/javascripts/jqplot/examples/waterfall.php.orig create mode 100644 public/javascripts/jqplot/examples/waterfall2.html create mode 100644 public/javascripts/jqplot/examples/yahooData.js create mode 100644 public/javascripts/jqplot/examples/yahooData.min.js create mode 100644 public/javascripts/jqplot/examples/zoom1.html create mode 100644 public/javascripts/jqplot/examples/zoomOptions.html create mode 100644 public/javascripts/jqplot/examples/zoomProxy.html create mode 100644 public/javascripts/jqplot/examples/zooming.html create mode 100644 public/javascripts/jqplot/excanvas.js create mode 100644 public/javascripts/jqplot/excanvas.min.js create mode 100644 public/javascripts/jqplot/gpl-2.0.txt create mode 100644 public/javascripts/jqplot/jqPlotCssStyling.txt create mode 100644 public/javascripts/jqplot/jqPlotOptions.txt create mode 100644 public/javascripts/jqplot/jquery.jqplot.css create mode 100644 public/javascripts/jqplot/jquery.jqplot.js create mode 100644 public/javascripts/jqplot/jquery.jqplot.min.css create mode 100644 public/javascripts/jqplot/jquery.jqplot.min.js create mode 100644 public/javascripts/jqplot/jquery.js create mode 100644 public/javascripts/jqplot/jquery.min.js create mode 100644 public/javascripts/jqplot/optionsTutorial.txt create mode 100644 public/javascripts/jqplot/plugins/jqplot.BezierCurveRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.BezierCurveRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.barRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.barRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.blockRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.blockRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.bubbleRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.bubbleRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasAxisTickRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasOverlay.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasOverlay.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasTextRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.canvasTextRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.categoryAxisRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.categoryAxisRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.ciParser.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.ciParser.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.cursor.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.cursor.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.dateAxisRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.dateAxisRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.donutRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.donutRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.dragable.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.dragable.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.enhancedLegendRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.funnelRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.funnelRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.highlighter.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.highlighter.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.json2.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.json2.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.logAxisRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.logAxisRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.mekkoAxisRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.mekkoRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.mekkoRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.meterGaugeRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.meterGaugeRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.mobile.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.mobile.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.ohlcRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.ohlcRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pieRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pieRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pointLabels.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pointLabels.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pyramidAxisRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pyramidGridRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pyramidGridRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pyramidRenderer.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.pyramidRenderer.min.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.trendline.js create mode 100644 public/javascripts/jqplot/plugins/jqplot.trendline.min.js create mode 100644 public/javascripts/jqplot/usage.txt create mode 100644 public/javascripts/update_chart.js create mode 100644 some.db create mode 100644 t/001_base.t create mode 100644 t/002_index_route.t create mode 100644 views/index.tt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4f1136 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +config.yml +notes diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..9e5003f --- /dev/null +++ b/MANIFEST @@ -0,0 +1,22 @@ +MANIFEST +bin/app.pl +config.yml +environments/development.yml +environments/production.yml +views/index.tt +views/layouts/main.tt +MANIFEST.SKIP +lib/charts.pm +public/css/style.css +public/css/error.css +public/images/perldancer-bg.jpg +public/images/perldancer.jpg +public/500.html +public/404.html +public/dispatch.fcgi +public/favicon.ico +public/dispatch.cgi +public/javascripts/jquery.js +t/002_index_route.t +t/001_base.t +Makefile.PL diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP new file mode 100644 index 0000000..8fd3d29 --- /dev/null +++ b/MANIFEST.SKIP @@ -0,0 +1,13 @@ +^\.git\/ +maint +^tags$ +.last_cover_stats +Makefile$ +^blib +^pm_to_blib +^.*.bak +^.*.old +^t.*sessions +^cover_db +^.*\.log +^.*\.swp$ diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..0d0fd11 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,21 @@ +use strict; +use warnings; +use ExtUtils::MakeMaker; + +WriteMakefile( + NAME => 'wnstats', + AUTHOR => q{Gryllida }, + VERSION_FROM => 'lib/wnstats.pm', + ABSTRACT => 'A small Wikinews month-before publish statistics site', + ($ExtUtils::MakeMaker::VERSION >= 6.3002 + ? ('LICENSE'=> 'perl') + : ()), + PL_FILES => {}, + PREREQ_PM => { + 'Test::More' => 0, + 'YAML' => 0, + 'Dancer' => 1.3091, + }, + dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, + clean => { FILES => 'charts-*' }, +); diff --git a/README.md b/README.md new file mode 100644 index 0000000..ea34799 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Create config.yml to specify database access. +"perl bin/update_db.pl" to populate or update the database. + + diff --git a/bin/app.pl b/bin/app.pl new file mode 100755 index 0000000..22c31d9 --- /dev/null +++ b/bin/app.pl @@ -0,0 +1,5 @@ +#!/usr/bin/env perl +use Dancer; +use Wnstats; + +dance; diff --git a/bin/update_db.pl b/bin/update_db.pl new file mode 100644 index 0000000..f7aaa1e --- /dev/null +++ b/bin/update_db.pl @@ -0,0 +1,108 @@ +#/usr/bin/perl + +use Dancer ':script'; +use Dancer::Plugin::Database; +use Data::Dumper; +use MediaWiki::API; +use DateTime; +use DateTime::Format::Strptime; +use DateTime::Event::Recurrence; +# use Dancer::Plugin::NYTProf; # do not run profiler unless we need it + + + +$|++; # forces a flush after every write or print + +my $mw = MediaWiki::API->new(); +$mw->{config}->{api_url} = 'https://en.wikinews.org/w/api.php'; + +my $strp = DateTime::Format::Strptime->new( + pattern => '%Y-%m-%dT%H:%M:%SZ', + locale => 'en_AU', + time_zone => 'UTC', +); + +my $strp_db_days = DateTime::Format::Strptime->new( + pattern => '%F', # Equivalent to %Y-%m-%d. (This is the ISO style date) + locale => 'en_AU', +); + +database->do("CREATE TABLE IF NOT EXISTS stats (date VARCHAR(12) PRIMARY KEY, count INTEGER)"); + +# +# populate or update the database +# + +my %data; +my @years=(2005..2013); +my @months=(1,2,3,4,5,6,7,8,9,10,11,12); + +# retrieve last saved date +my $get_latest_date = database->prepare + ("select date from stats order by date desc limit 1"); +$get_latest_date->execute(); +my $row = $get_latest_date->fetchrow_hashref; +my $latest_date = $row + ? $strp_db_days->parse_datetime($row->{date})->add(days => 1) # don't get stats if we already have them + : DateTime->new(year=>2005,month=>01,day=>01); + +# process yearly lists of published articles +for my $y (@years){ + next if $y < $latest_date->year; + print "getting ts... "; + # earliest possible: last saved date + my $startTime = ($latest_date->year eq $y) + ? $strp->format_datetime($latest_date) + : "$y:01:01 00:00:00"; + # latest possible: today + my ($h,$m,$s) = (DateTime->now->hour,DateTime->now->minute,DateTime->now->second); + my $endTime = ($y eq DateTime->now->year) + ? $strp->format_datetime((DateTime->now)->add(hours=>-$h,minutes=>-$m,seconds=>-$s-1)) # don't get stats for today + : "$y:12:31 23:59:59"; + + print "done.\n"; + + # retrieve articles list for a year + print "from $startTime to $endTime. getting data... "; + my $articles = $mw->list ( { + action => 'query', + list => 'categorymembers', + cmtitle => 'Category:Published', + cmnamespace => 0, + cmlimit => 5000, + cmsort => 'timestamp', + cmdir => 'desc', + cmstart => $endTime, + cmend => $startTime, + cmprop => "timestamp", + } ) or die $mw->{error}->{code} . ': ' . $mw->{error}->{details}; + + # put the daily articles count into %data + print "done.\ncounting ... "; + for my $article (@{$articles}){ + my $ts = $article->{timestamp}; + my $time = $strp->parse_datetime($ts); # This is a DateTime object + $data{sprintf("%d-%02d-%02d",($time->year, $time->month, $time->day))}++; + } + print "done.\n"; +} + + + +database->begin_work; # works with AutoCommit 1 +eval { + for my $key (keys %data){ + # insert count into the database + my $add_statement = database->prepare("INSERT INTO stats VALUES (?, ?)"); + $add_statement->execute($key, $data{$key}); + } + database->commit; # commit the changes if we get this far +}; +if ($@) { + warn "Transaction aborted because $@"; + # now rollback to undo the incomplete changes + # but do it in an eval{} as it may also fail + eval { database->rollback }; + # add other application on-error-clean-up code here +} + diff --git a/config.yml.dist b/config.yml.dist new file mode 100644 index 0000000..6fb2fcb --- /dev/null +++ b/config.yml.dist @@ -0,0 +1,53 @@ +# This is the main configuration file of your Dancer app +# env-related settings should go to environments/$env.yml +# all the settings in this file will be loaded at Dancer's startup. + +# Your application's name +appname: "wnstats" + +# The default layout to use for your application (located in +# views/layouts/main.tt) +layout: "main" + +# when the charset is set to UTF-8 Dancer will handle for you +# all the magic of encoding and decoding. You should not care +# about unicode within your app when this setting is set (recommended). +charset: "UTF-8" + +# template engine +# simple: default and very basic template engine +# template_toolkit: TT + +#template: "simple" + +template: "template_toolkit" +engines: + template_toolkit: + encoding: 'utf8' + start_tag: '[%' + end_tag: '%]' + +serializer: 'JSON' + +plugins: + #ajax: + #content_type: 'application/json' + #serializer: 'JSON' + #Database: + # driver: 'SQLite' + # database: 'some.db' + Database: + driver: 'mysql' + database: 'charts' + host: 'localhost' + port: 3306 + username: 'user' + password: 'pass' + on_connect_do: ["SET NAMES 'utf8'", "SET CHARACTER SET 'utf8'"] + dbi_params: + RaiseError: 1 + AutoCommit: 1 + NYTProf: + profdir: '/tmp/profiledata' + nytprofhtmlpath: '/usr/local/bin/nytprofhtml' + diff --git a/environments/development.yml b/environments/development.yml new file mode 100644 index 0000000..bf9f228 --- /dev/null +++ b/environments/development.yml @@ -0,0 +1,27 @@ +# configuration file for development environment + +# the logger engine to use +# console: log messages to STDOUT (your console where you started the +# application server) +# file: log message to a file in log/ +logger: "console" + +# the log level for this environement +# core is the lowest, it shows Dancer's core log messages as well as yours +# (debug, warning and error) +log: "core" + +# should Dancer consider warnings as critical errors? +warnings: 1 + +# should Dancer show a stacktrace when an error is caught? +show_errors: 1 + +# auto_reload is a development and experimental feature +# you should enable it by yourself if you want it +# Module::Refresh is needed +# +# Be aware it's unstable and may cause a memory leak. +# DO NOT EVER USE THAT FEATURE IN PRODUCTION +# OR TINY KITTENS SHALL DIE WITH LOTS OF SUFFERING +auto_reload: 0 diff --git a/environments/production.yml b/environments/production.yml new file mode 100644 index 0000000..86801b4 --- /dev/null +++ b/environments/production.yml @@ -0,0 +1,17 @@ +# configuration file for production environment + +# only log warning and error messsages +log: "warning" + +# log message to a file in logs/ +logger: "file" + +# don't consider warnings critical +warnings: 0 + +# hide errors +show_errors: 0 + +# cache route resolution for maximum performance +route_cache: 1 + diff --git a/lib/Wnstats.pm b/lib/Wnstats.pm new file mode 100644 index 0000000..be75a26 --- /dev/null +++ b/lib/Wnstats.pm @@ -0,0 +1,69 @@ +package Wnstats; +use Dancer ':syntax'; +use Dancer::Plugin::Ajax; +use DBIx::Class::Schema::Loader; +use DBIx::Class; +use Dancer::Plugin::Database; +use DateTime; +use DateTime::Event::Recurrence; +use Data::Dumper; + +sub num_published_month_before{ + my ($y0,$m0,$d0,$years) = @_; + my $date = sprintf("%d-%02d-%02d",($y0, $m0, $d0)); + my $driver_name = database->{Driver}->{Name}; + my $str_query; + if ($driver_name eq 'mysql') { + $str_query = 'select SUM(count) from stats where date < ? and date > ADDDATE(?,-31)'; + } elsif ($driver_name eq 'SQLite') { + $str_query = 'select SUM(count) from stats where date < ? and date > DATE(?,"-1 month")'; + } + my ($n) = database->selectrow_array($str_query,{},$date,$date); + my $count = $n ? $n : 0; + return $count; +} + + +sub get_chart_points{ + my ($years, $interval) = @_; # interval in days, <=30 + my @points; + + # get the abscissae using start date, end date, interval + # using DateTime::Event::Recurrence + my $dt1 = DateTime->new(year => $years->[0], month => 1, day => 1); + my $dt2 = DateTime->new(year => $years->[-1], month => 12, day => 31); + + if ($dt2 > DateTime->now){ + $dt2 = DateTime->now; + } + + my $daily_set = DateTime::Event::Recurrence->daily( interval => $interval); + my @days = $daily_set->as_list( start => $dt1, end => $dt2 ); + # for each abscissae, retrieve the ordinate ... + for my $day (@days){ + last if $day->truncate( to => "day" ) == DateTime->today; + # ... by checking the db for total last 30 days articles count + my ($y, $m, $d) = ($day->year, $day->month, $day->day); + push @points, ["$y-$m-$d",num_published_month_before ($y, $m, $d)]; + }; + return \@points; +} + + +ajax '/chart/:start_year?/:end_year?/:interval?' => sub { + # get years range input + my $start_year = param('start_year') ? param('start_year') : 2005; + my $end_year = param('end_year') ? param('end_year') : DateTime->now->year; + # get interval input + my $interval = param('interval') ? param('interval') : 10; # days + # retrieve the data and return the json + my $result = to_json get_chart_points([$start_year..$end_year], $interval); + return $result; +}; + +get '/' => sub { + template 'index'; +}; + + +true; diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..4000488 --- /dev/null +++ b/public/404.html @@ -0,0 +1,18 @@ + + + +Error 404 + + + + +

Error 404

+
+

Page Not Found

Sorry, this is the void.

+
+ + + \ No newline at end of file diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000..0be00e1 --- /dev/null +++ b/public/500.html @@ -0,0 +1,18 @@ + + + +Error 500 + + + + +

Error 500

+
+

Internal Server Error

Wooops, something went wrong

+
+ + + \ No newline at end of file diff --git a/public/css/error.css b/public/css/error.css new file mode 100644 index 0000000..003ee2a --- /dev/null +++ b/public/css/error.css @@ -0,0 +1,70 @@ +body { + font-family: Lucida,sans-serif; +} + +h1 { + color: #AA0000; + border-bottom: 1px solid #444; +} + +h2 { color: #444; } + +pre { + font-family: "lucida console","monaco","andale mono","bitstream vera sans mono","consolas",monospace; + font-size: 12px; + border-left: 2px solid #777; + padding-left: 1em; +} + +footer { + font-size: 10px; +} + +span.key { + color: #449; + font-weight: bold; + width: 120px; + display: inline; +} + +span.value { + color: #494; +} + +/* these are for the message boxes */ + +pre.content { + background-color: #eee; + color: #000; + padding: 1em; + margin: 0; + border: 1px solid #aaa; + border-top: 0; + margin-bottom: 1em; +} + +div.title { + font-family: "lucida console","monaco","andale mono","bitstream vera sans mono","consolas",monospace; + font-size: 12px; + background-color: #aaa; + color: #444; + font-weight: bold; + padding: 3px; + padding-left: 10px; +} + +pre.content span.nu { + color: #889; + margin-right: 10px; +} + +pre.error { + background: #334; + color: #ccd; + padding: 1em; + border-top: 1px solid #000; + border-left: 1px solid #000; + border-right: 1px solid #eee; + border-bottom: 1px solid #eee; +} + diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..706c3e5 --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,189 @@ + +body { +margin: 0; +margin-bottom: 25px; +padding: 0; +background-color: #ddd; +background-image: url("/images/perldancer-bg.jpg"); +background-repeat: no-repeat; +background-position: top left; + +font-family: "Lucida Grande", "Bitstream Vera Sans", "Verdana"; +font-size: 13px; +color: #333; +} + +h1 { +font-size: 28px; +color: #000; +} + +a {color: #03c} +a:hover { +background-color: #03c; +color: white; +text-decoration: none; +} + +#page { +background-color: #ddd; +width: 750px; +margin: auto; +margin-left: auto; +padding-left: 0px; +margin-right: auto; +} + +#content { +background-color: white; +border: 3px solid #aaa; +border-top: none; +padding: 25px; +width: 500px; +} + +#sidebar { +float: right; +width: 175px; +} + +#header, #about, #getting-started { +padding-left: 75px; +padding-right: 30px; +} + + +#header { +background-image: url("/images/perldancer.jpg"); +background-repeat: no-repeat; +background-position: top left; +height: 64px; +} +#header h1, #header h2 {margin: 0} +#header h2 { +color: #888; +font-weight: normal; +font-size: 16px; +} + +#about h3 { +margin: 0; +margin-bottom: 10px; +font-size: 14px; +} + +#about-content { +background-color: #ffd; +border: 1px solid #fc0; +margin-left: -11px; +} +#about-content table { +margin-top: 10px; +margin-bottom: 10px; +font-size: 11px; +border-collapse: collapse; +} +#about-content td { +padding: 10px; +padding-top: 3px; +padding-bottom: 3px; +} +#about-content td.name {color: #555} +#about-content td.value {color: #000} + +#about-content.failure { +background-color: #fcc; +border: 1px solid #f00; +} +#about-content.failure p { +margin: 0; +padding: 10px; +} + +#getting-started { +border-top: 1px solid #ccc; +margin-top: 25px; +padding-top: 15px; +} +#getting-started h1 { +margin: 0; +font-size: 20px; +} +#getting-started h2 { +margin: 0; +font-size: 14px; +font-weight: normal; +color: #333; +margin-bottom: 25px; +} +#getting-started ol { +margin-left: 0; +padding-left: 0; +} +#getting-started li { +font-size: 18px; +color: #888; +margin-bottom: 25px; +} +#getting-started li h2 { +margin: 0; +font-weight: normal; +font-size: 18px; +color: #333; +} +#getting-started li p { +color: #555; +font-size: 13px; +} + +#search { +margin: 0; +padding-top: 10px; +padding-bottom: 10px; +font-size: 11px; +} +#search input { +font-size: 11px; +margin: 2px; +} +#search-text {width: 170px} + +#sidebar ul { +margin-left: 0; +padding-left: 0; +} +#sidebar ul h3 { +margin-top: 25px; +font-size: 16px; +padding-bottom: 10px; +border-bottom: 1px solid #ccc; +} +#sidebar li { +list-style-type: none; +} +#sidebar ul.links li { +margin-bottom: 5px; +} + +h1, h2, h3, h4, h5 { +font-family: sans-serif; +margin: 1.2em 0 0.6em 0; +} + +p { +line-height: 1.5em; +margin: 1.6em 0; +} + +code, tt { + font-family: 'Andale Mono', Monaco, 'Liberation Mono', 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', monospace; +} + +#footer { +clear: both; +padding-top: 2em; +text-align: center; +padding-right: 160px; +font-family: sans-serif; +font-size: 10px; +} diff --git a/public/dispatch.cgi b/public/dispatch.cgi new file mode 100755 index 0000000..3bb7f2a --- /dev/null +++ b/public/dispatch.cgi @@ -0,0 +1,15 @@ +#!/usr/bin/env perl +use Dancer ':syntax'; +use FindBin '$RealBin'; +use Plack::Runner; + +# For some reason Apache SetEnv directives dont propagate +# correctly to the dispatchers, so forcing PSGI and env here +# is safer. +set apphandler => 'PSGI'; +set environment => 'production'; + +my $psgi = path($RealBin, '..', 'bin', 'app.pl'); +die "Unable to read startup script: $psgi" unless -r $psgi; + +Plack::Runner->run($psgi); diff --git a/public/dispatch.fcgi b/public/dispatch.fcgi new file mode 100755 index 0000000..8c42e3a --- /dev/null +++ b/public/dispatch.fcgi @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use Dancer ':syntax'; +use FindBin '$RealBin'; +use Plack::Handler::FCGI; + +# For some reason Apache SetEnv directives dont propagate +# correctly to the dispatchers, so forcing PSGI and env here +# is safer. +set apphandler => 'PSGI'; +set environment => 'production'; + +my $psgi = path($RealBin, '..', 'bin', 'app.pl'); +my $app = do($psgi); +die "Unable to read startup script: $@" if $@; +my $server = Plack::Handler::FCGI->new(nproc => 5, detach => 1); + +$server->run($app); diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..96c746534efbc258304d25171912ebf5493bc5ed GIT binary patch literal 1406 zcwW`hXHZmE7zW_iBqnGYQBeUkMx;iiE=9nVDn)E08bzgdLJ?#E5dYfDq?wK9jDjRj!|J6lT}u(QUYeKxS)PqW3bBL{Kf zs68AV4#VBq0UplB;o<5CZ?}{1baR5YyCb~Zod_5Bc)Gyf+ZBPnZV2>qL$JRmSf_jl zUxWqwf)(tC@DM++LW00L9e^{e07S9^ah4T?a}mLai3~+_WH{oYLJ1b)qQj676OQ=U zC?uVaKw?}Bk`iK(niPZ7ONmHNjw9l6Ir##vr6wRP{2^wE$*~~_#|3yi(TBhO=!0-#7;}^T zm=pG6UP$Kv$pJk1a}d+QG0Y0b@pNhsPo{=Q3a~IegvA+}0MCfUnMcG3p3M$p>G3e0 z&yQnqZW@d8(|GxG0{<*b;`P!LUOr#Is~1ZU|NA#2uU|kU5RmFyOa@!dscafcV`q+hv z*p=z+d~S|>ReoVpWrSnOt;|nac+`eeZ4yV|XNx^=9#-(3RcpNzA=B~T-Nc1mWhZ)I5Ul#i=bNRsfd+aXu zJo=6IP35paeU8-X=JmBjwjnpv>Q%mGet3Pk?3K0UWnXkqThbI%jW(WtPbT5>>Qg!t zw{%rhC0o{=@-SEX8ceEwPKAAUR;%yP<(`6#!I4DegYSKIv3F1v2pahq=Gd9&>G Qb~-dtWIXC!|L0xx9}czIivR!s literal 0 HcwPel00001 diff --git a/public/images/perldancer-bg.jpg b/public/images/perldancer-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ee6b77394657a70de11dbda4f0c8ceffb07bd92 GIT binary patch literal 7125 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 Q4Q=0Fp8x;bo~^$B0&oN~-2eap literal 0 HcwPel00001 diff --git a/public/images/perldancer.jpg b/public/images/perldancer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f9e718c1cde297047ece800fdd8252f9a26e2c7 GIT binary patch literal 2240 zcwUuMXHb)g7X3mJ63PY=nnV)15SovoAOr}o5Q-vAN{AvtD2pH+L$M%DWdR{9Rf>iP zNN=I)E-1LTph226DN8R()u57%@5h_{`_7%YGk4Cp=gj?cIpdsJK-k*C$^rm^K!7E; z0L~F0VirpA45xU@MEQsN$q=p1*>NTTGXM&PKp#vp;gY(-00;u&0dtcf;Qvav0|biX zYEZIp5jjm0F?-LD+oIwMTBZ&Um(?1o+>1ARZ)2 zmTSeC00g-l4-$+7jDh#jRa4B77O!2BA)PX>f7B`B#_xE$CHlxk>Wz78mAAqkxZ<<8jd{fF zvJZZ71MNO4LVPXpi@hq!=elwo1J7*xml*UJ-7((Z9~N^u__ZCxE?9qWZ5Y#T70eQ-O9ftxM(vN+e z3w)a>Wui;#dX3G6W&EyJN!^Mog)@ukf4$#XiB7kBc)ozj+dFDb@fBX3$Y;_LEW`=b zD*b&Yw3joBiUp(n3a&RcE8z!DtQC_L+;$qF$ut_iA-KrNw{qw4VroP$qPhQaMQQ0d ze~%FIK%#dG#yw2;gcUf8xLuw|BX}dMpih@xm9aF39xZ9D302!5hajPsR3W(8tkI0 z>B_tl9ANXhw2{Y+as!VMi?WTid#}n(-LJ%6rdohp?kll}59K$Xjm5MF9Lba9%?U>2 z+c_8xU>ikTt$jAJ(a8ZIn7|}*#3fc5)h^Q(e`(YHq*}p^jO_T+?3u|qvbMrzZL4-1 z!%aXiiUUxb3HJ0&U7^ z-B?5m6;*mzXJOPu93wnTV?tUV)L!@Z+bO&m^h{7pZJ(?Q)4thfzk_4lMCexAew$qD zEW7eY%Aav(MF+gv!t!KL)X?bb$>i0*7Gk{tMe#SlRIReu?Dy!5*$C-wDbpMIF{H%g zbc7RlysL(ps`Lg|kEA~~uB%(19=4*-50I2LB?2NY)XCQ*jZ9QzR+qj&$EH zu+rU~5#0cEn}JL0W|69?X@awpYPHkt?@c&D(<%oLyLBVBeYZ*dsWVxwsw3(3kem5m zd>V3E0{1|OL^S}vednk-^IPIcOY+th?%I-`sDQ4mYH0V=&^orL$I_IpDORT6EV@9u z4j+WAve$Z2VqH6HrgPrTPH1S0L|%p>R4Qyfjhk!qwlNQXG45jT1c5fuv-;=XhZqt)K$7SI zpLqc_rV$6|*hI?vUHHhysw{mO`g1~)DZjfKj7-ooQv2ditFtVRo^uQA7@vb`ELVTn z9D5qNrOa|c>x5q^$2p*$QE=9di6(G+ReYbM0(-@}HnyjBq3Zhq%{=Hg?tj?O6WtM+ zf=KkkQj}z*7LE;8mpBX?bXyyyj!qXAga?(YbcMB(a%mC=8Og$R!Sv4*LknKGzRpyS zO|X10Dd-Z~q@k5sq3y7{Jw)PlpjOcoUhu)slhMxaLW9rfWCrqSN6_->TuP zzj432)!|xSLR9%A9!S{FnZuOZe5#v2!{=zLF6(L(2Rj`%@o{`D$%zAWO4&A0&b7sU z3F=bC*#A_^kLLhU#jg|&S1b0^YQ_(yX{S00f(9Nj)AEEF4UC7T$+`0Ae%e9QH|X^9 za9zJh=kd%Xm1;4zc)G=CZ00=iY#|hs9y0oT#CCl$ynvB+7;`v&Anai){_YjOwC0vE z#yWt1ct!TSFVE<)?2C%b2^o>sONC$ia>pcHg57Zb_!5vp1O}g$J%$Hn zI`m15;Kz}>rdBHE=1=d-)_--ULe#&SHUJYWb{LM=K{C4C4gnO#QS+FMS^NTgr zH4$3JiD#ez)+mv}Xf~DYZ#P}*rv=9=b6J{xTTHtiS;M=cVr*6w5chqtiin~+Pl_5DHFq6d&@Eu)D>^>r;q8c~%Xw&u-8jMQ VYQrrWT__k`Tt4FOUuevE{|}!g. + +Downloads can be found at . + +The mailing list is at . + +Examples and unit tests are at . + +Documentation is at . + +The project page and source code are at . + +Bugs, issues, feature requests: . + +Basic Usage Instructions: + +jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.4 is included in +the distribution. To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and +optionally the excanvas script to support IE version prior to IE 9 in your web page: + +> +> +> +> + +For usage instructions, see in usage.txt. For available options, see + in jqPlotOptions.txt. + +Building from source: + +If you've cloned the repository, you can build a distribution from source. +You need to have ant installed. You can simply +type "ant" from the jqplot directory to build the default "all" target. +There are 6 pertinent targets: clean, dist, min, docs, compress and all. Use: + +> ant -p + +to get a description of the various build targets. + +Legal Notices: + +Copyright (c) 2009-2010 Chris Leonello +jqPlot is currently available for use in all personal or commercial projects +under both the MIT and GPL version 2.0 licenses. This means that you can +choose the license that best suits your project and use it accordingly. + +Although not required, the author would appreciate an email letting him +know of any substantial use of jqPlot. You can reach the author at: +chris at jqplot or see http://www.jqplot.com/info.php . + +If you are feeling kind and generous, consider supporting the project by +making a donation at: http://www.jqplot.com/donate.php . + +jqPlot includes date instance methods and printf/sprintf functions by other authors: + +Date instance methods: + + author Ken Snyder (ken d snyder at gmail dot com) + date 2008-09-10 + version 2.0.2 (http://kendsnyder.com/sandbox/date/) + license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + +JavaScript printf/sprintf functions. + + version 2007.04.27 + author Ash Searle + http://hexmen.com/blog/2007/03/printf-sprintf/ + http://hexmen.com/js/sprintf.js + The author (Ash Searle) has placed this code in the public domain: + "This code is unrestricted: you are free to use it however you like." diff --git a/public/javascripts/jqplot/changes.txt b/public/javascripts/jqplot/changes.txt new file mode 100644 index 0000000..79c1567 --- /dev/null +++ b/public/javascripts/jqplot/changes.txt @@ -0,0 +1,395 @@ +Title: Change Log + +1.0.0b2: +* Major improvements in memory usage: +** Merged in changes from Timo Besenruether to reuse canvas elements and improve + memory performance. +** Fixed all identifiable DOM leaks. +** Mergged in changes from cguillot for memory improvements in IE < 9. +* Added vertical and dashed vertical line support for canvas overlay. +* Fixed bug where initially hidden plots would not display. +* Fixed bug with point labels and null data points. +* Updated to jQuery 1.6.1. +* Improved pie slice margin calculation and fixed slice margin and pie positioning + with small slices. +* Improved bar renderer so bars always start at 0 if: +** The axis is a linear axis (not log/date). +** There are no other line types besides bars attached to the axis. +** The data on the axis is all >= 0. +** The user has not specified a pad, padMin or forceTickAt0 = true option. +* Modified tick prefix behavious so prefix no added to all ticks, even if format + string is specified. +* Fix to ensure original tick formats are applied when zooming and resetting + zoom. +* Updated auto tick format string so format adjusted when zooming. +* Modified auto tick computation to put less ticks on small plots and more + ticks on large plots. +* Update bubble render to support gradients in IE 9. + +1.0.0b1: +* Much improved tick generation algorithm to get precise rounded + tick values (Thanks Scott Prahl!). +* Auto compute tick format string if none is provided. +* Much better "slicing" of pie charts when using "sliceMargin" option to set + a gap between the slices. +* Expanded canvasOverlay plugin to create arbitrary dashed and solid + horizontal and vertical lines on top of plot. +* Added defaultColors and defaultNegativeColors options to $.jqplot.config. +* Fixed issue #318, highlighter & bar renderer incompatability. +* Improve highlighter tooltip positioning with negative bars. +* Fixed #305, mispelling of jqlotDragStart and jqlotDragStop. MUST NOW BIND + TO jqplotDragStart and jqplotDragStop. +* Fixed #290, some variables left in global scope. +* Fixed #289, OHLC line widths hard coded at 1.5. Now set by lineWidth option. +* Fixed #296 for determining databounds on log axes. +* Updated to jQuery 1.5.1 +* Fixed waterfall plot to ensure first and last bars always fill to zero. +* Added lineJoin and lineCap option to series lines. +* Bar widths now based on width of grid, not plot target for better scaling. +* Added looseZoom option to cursor so zooming can produce well rounded ticks. +* Added forceTickAt0 and forceTickAt100 options to ensure there will always + be a tick at 0 or 100 in the plot. +* Fixed bug where cursor legend didn't honor series showLabel option. + + +1.0.0a: + +* Series can now be moved forward or backward in stack to e.g. bring a line + forward when mousing over a point. +* Can now move outside of grid area while zooming. Can have zoom + constrained to grid area or allow zooming outside. +* Fixed issue #142 with tooltip drawn on top of event canvas, hiding + mouse events. +* Fixed #147 where pie slices with 0 value not rendering properly in IE. +* Fixed #130 where stack data not sorted properly. +* Fixed bug with null values not handled properly in category axes. +* Fixed #156 where pie charts not rendering on QTWebKit. +* Now using feature detection for canvas and canvas text capability + rather than browser version. +* Added enahncedLegendRenderer plugin to allow multi row/column legends + and clickable labels to show/hide series. +* Added fillToValue option to allow filled line plot to fill to an + arbitrary value. +* Added block plot plugin. +* Added funnel type charts. +* Added meter gauge type charts. +* Added plot theming support. +* $.jqplot.config.enablePlugins now false by default. +* Implemented highlighting on bar, pie, donut, funnel, etc. charts. +* Fix to pointlabels plugin to align labels properly on multi series plots. +* Added custom error handling to display error message in plot area. +* Fixed issue where would call to draw grid border of 0 width would + result in a default border being drawn. +* Added options to place legend outside of grid and shrink grid so everything + stays within plot div. +* Fixed bug in color generator so now calls to get() continually cycle + through colors just like next(). +* Added defaultAxisStart option. +* Added gradient fills to bubbles. +* Added bubble charts. +* Added showLabels option to bubble charts. +* Pass bubble radius to event callback in bubble charts. +* Fixed #207, typo in docs. +* Fixed #206 where "value" pie slice data labels were displaying wrong + value. +* Fixed #147 with 0 value slices in IE6. +* Fixed issue #241, disabled varyBarColor option in stacked charts. +* Added dataRenderer option to allow custom processors for JSON, AJAX + and anywhere else you might want to get data. +* Fixed null value handling so plot now properly skip or join over nulls. +* Fixed showTicks and showTickMarks option conflicts. +* Fixed issue #185 where pointLabels plugin incompatibility could crash + pie, donut and other plots. +* Fixed #23 and #143 to obey gridPadding option. +* Fixed #233 with highlighter tooltip separator. +* Fixed #224 where type checking failing on GWT. +* Fixed #272 with pie highlighting not working on replot. +* Memory performance improvements. +* Changes to build script so everything should build when pulled from repo. +* Fixed issue #275, IE 6/7 don't support array indexing of strings. +* Added event listener hooks for mouseUp, mouseDown, etc. to all line plots. +* Fixed bug with highlighter not working when null in data. +* Updated to jQuery 1.4.4 +* Fixed bug where donut plots showed value of radians of slice instead + of actual data. +* Reverted to excanvas r3 so IE8 no longer has to emulate IE7. +* Added tooltipContentEditor option to highlighter, allowing callback + to manipulate tooltip content at run time (thanks Tim Bunce!). +* Fixed bug where axes scale not resetting. +* Fixed bug with date axes where data bounds not properly set. +* Fixed issue where tick marks disappear if grid lines turned off. +* Updated replot method to allow passing in axes options for more control. +* Added experimental support for "broken" axes. +* Fixed bug with pies where pies with 0 valued slices did not draw correctly. +* Added canvasOverlay plugin to allow drawing of arbitrary shapes on a canvas + over the plot. +* Added option to display arbitrary text/html (message, animated gif, etc.) if + plot is constructed without data. Allow a "data loading" indicator to be shown. +* Added resetAxisValues method to manually update axis ticks without + redrawing the plot. +* Fix to labels on negative bars so label postiion of 'n' will be below a negative bar, + just as it is above a positive bar (thanks guigod!). +* Added thousands separator character (') to sprintf formatting (thanks yuichi1004!). +* Re-factored date parsing/formatting to use new jsDate module which does not + extend the Date prototype. + + +0.9.7: + +* Added Mekko chart plot type with enhanced legend and axes support. +* Implemented vertical waterfall charts. Can create waterfall plot as + option to bar chart. See examples folder of distribution. +* Enhanced plot labels for waterfall style. +* Enhanced bar plots so you can now color each bar of a series + independently with the "varyBarColor" option. +* Re-factored series drawing so that each series and series shadow drawn + on it's own canvas. Allows series to be redrawn independently of each other. +* Added additional default series colors. +* Added useNegativeColors option to turn off negative color array and use + only seriesColors array to define all bar/filled line colors. +* Fix css for cursor legend. +* Modified shape renderer so rectangles can be stroked and filled. +* Re-factored date methods out of dateAxisRenderer so that date formatter + and methods can be accesses outside of dateAxisRenderer plugin. +* Fixed #132, now trigger series change event on plot target instead of drag canvas. +* Fixes issue #116 where some source files had mix of tabs and spaces + for indentation. Should have been all spaces. +* Fixed issue #126, some links broken in docs section of web site. +* Fixed issue #90, trendline plugin incompatibility with pie renderer. +* Updated samples in examples folder of distribution to include navigation + links if web server is set up to process .html files with php. + + +0.9.6: + +* New, easier to use, replot() method for placing plots in tabs, accordions, + resizable containers or for changing plot parameters programmatically. +* Updated legend renderer for pie charts to draw swatches which will + print correctly. +* Fixed issue #118 with patch from taum so autoscale option will + honor tickInterval and numberTicks options +* Fix to plot diameter calculation for initially hidden plots. +* Added examples for making plots in jQuery UI tabs and accordions. +* Fixed issue #120 where pie chart with single slice not displaying + correctly in IE and Chrome + + +0.9.5.2: + +* Fixed #102 where double clicking on plot that has zoom enabled, but + has not been zoomed resulted in error. +* Fixed bug where candlestick coloring options not working. +* Added option to turn individual series labels off in the legend. + + +0.9.5.1: + +* Fixed bug where tooltip not working with OHLC and candlestick charts. +* Added additional marker styles: plus, X and dash. + + +0.9.5: + +* Implemented "zoomProxy". zoomProxy allows zooming one plot from another + such as an overview plot. +* Zooming can now be constrained to just x or y axis. +* Enhanced cursor plugin with vertical "dataTracking" line. This is a line + at the cursor location with a readout of data points at the line location + which are displayed in the chart legend. +* Changed cursor tooltip format string. Now one format string is used for + entire tooltip. +* Added mechanisms to specify plot size when plot target is hidden or plot + height/width otherwise cannot be determined from markup. +* Added $.jqplot.config object to specify jqplot wide configuration options. + These include enablePlugins to globally set the default plugin state on/off + and defaultHeight/defaultWidth to specify default plot height/width. +* Added fillToZero option which forces filled charts to fill to zero as opposed + to axis minimum. Thus negative filled bar/line values will fill upwards to + zero axis value. +* Added option to disable stacking on individual lines. +* Changed targetId property of the plot object so it now includes a "#" before + the id string. +* Improved tick and body sizing of Open Hi Low Close and candlestick charts. +* Removed lots of web site related files from the repository. This means that, + if working from the sources, user's won't be able to build the jqplot web + site and the docs/tests that are hosted on that site. The minified and + compressed distribution packages will build fine. +* Lots of examples were added to a separate examples directory to better show + functionality of jqPlot for local testing with the distribution. +* Many various bug fixes and other minor enhancements. + + +0.9.4: + +* Implemented axis labels. Labels can be rendered in div tags or as canvas + elements supporting rotated text. +* Improved rotated axis label positioning so labels will start or end at a + tick position. +* Fixed bug where an empty data series would hang plot rendering. +* completed issue #66 for misc. improvements to documentation. +* Fixed issue #64 where the same ID's were assigned to cursor and highlighter + elements. +* Added option to legend to encode special HTML characters. +* Fixed undesirable behavior where point labels for points off the plot + were being rendered. +* Added edgeTolerance option to point label renderer to control rendering of + labels near plot edges. + + +0.9.3: + +* Preliminary support for axis labels. Currently rendered into DIV tags, + so no rotated label support. This feature is currently experimental. +* Fixed bug #52, needed space in tick div tag between style and class declarations + or plot failed in certain application doctypes. +* Fixed issue #54, miter style line join for chart lines causing spikes at steep + changes in slope. Changed miter style to round. +* Added examples for new autoscaling algorithm. +* Fixed bug #57, category axis labels disappear on redraw() +* Improved algorithm which controlled maximum number of labels that would display + on a category axis. +* Fixed bug #45 where null values causing errors in plotData and gridData. +* Fixed issue #60 where seriesColors option was not working. + + +0.9.2: + +* Fixed bug #45 where a plot could crash if series had different numbers of points. +* Fixed issue #50, added option to turn off sorting of series data. +* Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option. + +0.9.1: + +* Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render. +* Fixed bug #41 where pie and bar charts not rendered correctly on redraw(). +* Fixed bug #11, filled stacked line plots not rendering correctly in IE. +* Fixed bug #42 where stacked charts not rendering with string date axis ticks. +* Fixed bug in redraw() method where axes ticks were not reset. +* Fixed "jqplotPreRedrawEvent" that should have been named "jqplotPostRedraw" event. + +0.9.0: + +* Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts. +* Added support for arbitrary labels on the data points. +* Enhanced highlighter plugin to allow custom formatting control of entire tooltip. +* Enhanced highlighter to support multiple y values in a data point. +* Fixed bug #38 where series with a single point with a negative value would fail. +* Improvements to examples to show what plugins to include. +* Expanded documentation for some of the plugins. + +0.8.5: + +* Added zooming ability with double click or single click options to reset zoom. +* Modified default tick spacing algorithm for date axes to give more space to ticks. +* Fixed bug #2 where tickInterval wasn't working properly. +* Added neighborThreshold option to control how close mouse must be to + point to trigger neighbor detection. +* Added double click event handler on plot. + +0.8.0: + +* Support for up to 9 y axes. +* Added option to control padding at max/min bounds of axes separately. +* Closed issue #21, added options to control grid line color and width. +* Closed issue #20, added options to filled line charts to stoke above + fill and customize fill color and transparency. +* Improved structure of on line documentation to make usage and options + docs default. +* Added much documentation on options and css styling. + +0.7.1: + +* Bug fix release +* Fixed bug #6, missing semi-colons messing up some javascript compressors. +* Fixed bug #13 where 2D ticks array of [values, labels] would fail to + renderer with DateAxisRenderer. +* Fixes bug #16 where pie renderer overwriting options for all plot types + and crashing non pie plots. +* Fixes bug #17 constrainTo dragable option mispelled as "contstrainTo". + Fixed dragable color issue when used with trend lines. + +0.7.0: + +* Pie chart support +* Enabled tooltipLocation option in highlighter. +* Highlighter Tooltip will account for mark size and highlight size when + positioning itself. +* Added ability to show just x, y or both axes in highlighter tooltip. +* Added customization of separator between axes values in highlighter tooltip. +* Modified how shadows are drawn for lines, bars and markers. Now drawn first, + so they are always behind the object. +* Adjustments to shadow parameters on lines to account for new shadow positioning. +* Added a ColorGenerator class to robustly return next available color + for a plot with wrap around to first color at end. +* Udates to docs about css file. +* Fixed bug with String x values in series and IE error on sorting (Category Axis). +* Added cursor changes in dragable plugin when cursor near dragable point. + +0.6.6b: + +* Added excanvas.js and excanvas.min.js to compressed distributions. +* Added example/test html pages I had locally into repository and to + compressed distributions. + +0.6.6a: + +* Removed absolute positioning from dom element and put back into css file. +* Duplicate of 0.6.6 with a suffix to unambiguously differentiate between + previously posted 0.6.6 release. + +0.6.6: + +* Fixed bug #5, trend line plugin failing when no trend line options specified. +* Added absolute position css spec to axis tick dom element. +* Enhancement to category axes, more intuitive handling of series with + missing data values. + +0.6.5: + +* Fixed bug #4, series of unequal data length not rendering correctly. + This is a bugfix release only. + +0.6.4: + +* Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y + values are euqal) or single value data series would crash. + +0.6.3: + +* Support for stacked line (a.k.a. area) and stacked bar (horizontal and + vertical) charts. +* Refactored barRenderer to use default shape and shadow renderers. +* Added info (contacts & support information) page to web site. + +0.6.2: + +* This is a minor upgrade to docs and build only. No functionality has changed. +* Ant build script generates entire site, examples, tests and distribution. +* Improvements to documentation. + +0.6.1: + +* New sprintf implementation from Ash Searle that implements %g. +* Fix to sprintf e/f formats. +* Created new format specifier, %p and %P to preserve significance. +* Modified p/P format to better display larger numbers. +* Fixed and simplified significant digits calculation for sprintf. +* Added option to have cursor tooltip follow the mouse or not. +* Added options to change size of highlight. +* Updates to handle dates like '6-May-09'. +* Mods to improve look of web site. +* Updates to documentation. +* Added license and copyright statement to source files. + +0.6.0: + +* Added rotated text support. Uses native canvas text functionality in + browsers that support it or draws text on canvas with Hershey font +* metrics for non-supporting browsers. +* Removed lots of lint in js code. +* Moved tick css from js code into css file. +* Fix to tick positioning css. y axis ticks were positioned to wrong side of axis div. +* Re-factored axis tick renderer instantiation into the axes renderers themselves. + + +For changes prior to 0.6.0 release, please see change log at http://bitbucket.org/cleonello/jqplot/changesets/ \ No newline at end of file diff --git a/public/javascripts/jqplot/copyright.txt b/public/javascripts/jqplot/copyright.txt new file mode 100644 index 0000000..3730cff --- /dev/null +++ b/public/javascripts/jqplot/copyright.txt @@ -0,0 +1,56 @@ +/** + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: @VERSION + * + * Copyright (c) 2009-2011 Chris Leonello + * jqPlot is currently available for use in all personal or commercial projects + * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL + * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * Although not required, the author would appreciate an email letting him + * know of any substantial use of jqPlot. You can reach the author at: + * chris at jqplot dot com or see http://www.jqplot.com/info.php . + * + * If you are feeling kind and generous, consider supporting the project by + * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + * included jsDate library by Chris Leonello: + * + * Copyright (c) 2010-2011 Chris Leonello + * + * jsDate is currently available for use in all personal or commercial projects + * under both the MIT and GPL version 2.0 licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * jsDate borrows many concepts and ideas from the Date Instance + * Methods by Ken Snyder along with some parts of Ken's actual code. + * + * Ken's origianl Date Instance Methods and copyright notice: + * + * Ken Snyder (ken d snyder at gmail dot com) + * 2008-09-10 + * version 2.0.2 (http://kendsnyder.com/sandbox/date/) + * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) + * + * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. + * Larry has generously given permission to adapt his code for inclusion + * into jqPlot. + * + * Larry's original code can be found here: + * + * https://github.com/lsiden/export-jqplot-to-png + * + * + */ diff --git a/public/javascripts/jqplot/docs/files/MIT-LICENSE-txt.html b/public/javascripts/jqplot/docs/files/MIT-LICENSE-txt.html new file mode 100644 index 0000000..25aef1a --- /dev/null +++ b/public/javascripts/jqplot/docs/files/MIT-LICENSE-txt.html @@ -0,0 +1,39 @@ + + +MIT License + + + + + + + + + +

Copyright © 2009-2012 Chris Leonello

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.

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/changes-txt.html b/public/javascripts/jqplot/docs/files/changes-txt.html new file mode 100644 index 0000000..2c6f6e5 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/changes-txt.html @@ -0,0 +1,39 @@ + + +Change Log + + + + + + + + + +

1.0.0b2

  • Major improvements in memory usage: ** Merged in changes from Timo Besenruether to reuse canvas elements and improve memory performance.  ** Fixed all identifiable DOM leaks.  ** Mergged in changes from cguillot for memory improvements in IE < 9.
  • Added vertical and dashed vertical line support for canvas overlay.
  • Fixed bug where initially hidden plots would not display.
  • Fixed bug with point labels and null data points.
  • Updated to jQuery 1.6.1.
  • Improved pie slice margin calculation and fixed slice margin and pie positioning with small slices.
  • Improved bar renderer so bars always start at 0 if: ** The axis is a linear axis (not log/date).  ** There are no other line types besides bars attached to the axis.  ** The data on the axis is all >= 0.  ** The user has not specified a pad, padMin or forceTickAt0 = true option.
  • Modified tick prefix behavious so prefix no added to all ticks, even if format string is specified.
  • Fix to ensure original tick formats are applied when zooming and resetting zoom.
  • Updated auto tick format string so format adjusted when zooming.
  • Modified auto tick computation to put less ticks on small plots and more ticks on large plots.
  • Update bubble render to support gradients in IE 9.

1.0.0b1

  • Much improved tick generation algorithm to get precise rounded tick values (Thanks Scott Prahl!).
  • Auto compute tick format string if none is provided.
  • Much better “slicing” of pie charts when using “sliceMargin” option to set a gap between the slices.
  • Expanded canvasOverlay plugin to create arbitrary dashed and solid horizontal and vertical lines on top of plot.
  • Added defaultColors and defaultNegativeColors options to $.jqplot.config.
  • Fixed issue #318, highlighter & bar renderer incompatability.
  • Improve highlighter tooltip positioning with negative bars.
  • Fixed #305, mispelling of jqlotDragStart and jqlotDragStop.  MUST NOW BIND TO jqplotDragStart and jqplotDragStop.
  • Fixed #290, some variables left in global scope.
  • Fixed #289, OHLC line widths hard coded at 1.5.  Now set by lineWidth option.
  • Fixed #296 for determining databounds on log axes.
  • Updated to jQuery 1.5.1
  • Fixed waterfall plot to ensure first and last bars always fill to zero.
  • Added lineJoin and lineCap option to series lines.
  • Bar widths now based on width of grid, not plot target for better scaling.
  • Added looseZoom option to cursor so zooming can produce well rounded ticks.
  • Added forceTickAt0 and forceTickAt100 options to ensure there will always be a tick at 0 or 100 in the plot.
  • Fixed bug where cursor legend didn’t honor series showLabel option.

1.0.0a

  • Series can now be moved forward or backward in stack to e.g. bring a line forward when mousing over a point.
  • Can now move outside of grid area while zooming.  Can have zoom constrained to grid area or allow zooming outside.
  • Fixed issue #142 with tooltip drawn on top of event canvas, hiding mouse events.
  • Fixed #147 where pie slices with 0 value not rendering properly in IE.
  • Fixed #130 where stack data not sorted properly.
  • Fixed bug with null values not handled properly in category axes.
  • Fixed #156 where pie charts not rendering on QTWebKit.
  • Now using feature detection for canvas and canvas text capability rather than browser version.
  • Added enahncedLegendRenderer plugin to allow multi row/column legends and clickable labels to show/hide series.
  • Added fillToValue option to allow filled line plot to fill to an arbitrary value.
  • Added block plot plugin.
  • Added funnel type charts.
  • Added meter gauge type charts.
  • Added plot theming support.
  • $.jqplot.config.enablePlugins now false by default.
  • Implemented highlighting on bar, pie, donut, funnel, etc. charts.
  • Fix to pointlabels plugin to align labels properly on multi series plots.
  • Added custom error handling to display error message in plot area.
  • Fixed issue where would call to draw grid border of 0 width would result in a default border being drawn.
  • Added options to place legend outside of grid and shrink grid so everything stays within plot div.
  • Fixed bug in color generator so now calls to get() continually cycle through colors just like next().
  • Added defaultAxisStart option.
  • Added gradient fills to bubbles.
  • Added bubble charts.
  • Added showLabels option to bubble charts.
  • Pass bubble radius to event callback in bubble charts.
  • Fixed #207, typo in docs.
  • Fixed #206 where “value” pie slice data labels were displaying wrong value.
  • Fixed #147 with 0 value slices in IE6.
  • Fixed issue #241, disabled varyBarColor option in stacked charts.
  • Added dataRenderer option to allow custom processors for JSON, AJAX and anywhere else you might want to get data.
  • Fixed null value handling so plot now properly skip or join over nulls.
  • Fixed showTicks and showTickMarks option conflicts.
  • Fixed issue #185 where pointLabels plugin incompatibility could crash pie, donut and other plots.
  • Fixed #23 and #143 to obey gridPadding option.
  • Fixed #233 with highlighter tooltip separator.
  • Fixed #224 where type checking failing on GWT.
  • Fixed #272 with pie highlighting not working on replot.
  • Memory performance improvements.
  • Changes to build script so everything should build when pulled from repo.
  • Fixed issue #275, IE 6/7 don’t support array indexing of strings.
  • Added event listener hooks for mouseUp, mouseDown, etc. to all line plots.
  • Fixed bug with highlighter not working when null in data.
  • Updated to jQuery 1.4.4
  • Fixed bug where donut plots showed value of radians of slice instead of actual data.
  • Reverted to excanvas r3 so IE8 no longer has to emulate IE7.
  • Added tooltipContentEditor option to highlighter, allowing callback to manipulate tooltip content at run time (thanks Tim Bunce!).
  • Fixed bug where axes scale not resetting.
  • Fixed bug with date axes where data bounds not properly set.
  • Fixed issue where tick marks disappear if grid lines turned off.
  • Updated replot method to allow passing in axes options for more control.
  • Added experimental support for “broken” axes.
  • Fixed bug with pies where pies with 0 valued slices did not draw correctly.
  • Added canvasOverlay plugin to allow drawing of arbitrary shapes on a canvas over the plot.
  • Added option to display arbitrary text/html (message, animated gif, etc.) if plot is constructed without data.  Allow a “data loading” indicator to be shown.
  • Added resetAxisValues method to manually update axis ticks without redrawing the plot.
  • Fix to labels on negative bars so label postiion of ‘n’ will be below a negative bar, just as it is above a positive bar (thanks guigod!).
  • Added thousands separator character (‘) to sprintf formatting (thanks yuichi1004!).
  • Re-factored date parsing/formatting to use new jsDate module which does not extend the Date prototype.

0.9.7

  • Added Mekko chart plot type with enhanced legend and axes support.
  • Implemented vertical waterfall charts.  Can create waterfall plot as option to bar chart.  See examples folder of distribution.
  • Enhanced plot labels for waterfall style.
  • Enhanced bar plots so you can now color each bar of a series independently with the “varyBarColor” option.
  • Re-factored series drawing so that each series and series shadow drawn on it’s own canvas.  Allows series to be redrawn independently of each other.
  • Added additional default series colors.
  • Added useNegativeColors option to turn off negative color array and use only seriesColors array to define all bar/filled line colors.
  • Fix css for cursor legend.
  • Modified shape renderer so rectangles can be stroked and filled.
  • Re-factored date methods out of dateAxisRenderer so that date formatter and methods can be accesses outside of dateAxisRenderer plugin.
  • Fixed #132, now trigger series change event on plot target instead of drag canvas.
  • Fixes issue #116 where some source files had mix of tabs and spaces for indentation.  Should have been all spaces.
  • Fixed issue #126, some links broken in docs section of web site.
  • Fixed issue #90, trendline plugin incompatibility with pie renderer.
  • Updated samples in examples folder of distribution to include navigation links if web server is set up to process .html files with php.

0.9.6

  • New, easier to use, replot() method for placing plots in tabs, accordions, resizable containers or for changing plot parameters programmatically.
  • Updated legend renderer for pie charts to draw swatches which will print correctly.
  • Fixed issue #118 with patch from taum so autoscale option will honor tickInterval and numberTicks options
  • Fix to plot diameter calculation for initially hidden plots.
  • Added examples for making plots in jQuery UI tabs and accordions.
  • Fixed issue #120 where pie chart with single slice not displaying correctly in IE and Chrome

0.9.5.2

  • Fixed #102 where double clicking on plot that has zoom enabled, but has not been zoomed resulted in error.
  • Fixed bug where candlestick coloring options not working.
  • Added option to turn individual series labels off in the legend.

0.9.5.1

  • Fixed bug where tooltip not working with OHLC and candlestick charts.
  • Added additional marker styles: plus, X and dash.

0.9.5

  • Implemented “zoomProxy”.  zoomProxy allows zooming one plot from another such as an overview plot.
  • Zooming can now be constrained to just x or y axis.
  • Enhanced cursor plugin with vertical “dataTracking” line.  This is a line at the cursor location with a readout of data points at the line location which are displayed in the chart legend.
  • Changed cursor tooltip format string.  Now one format string is used for entire tooltip.
  • Added mechanisms to specify plot size when plot target is hidden or plot height/width otherwise cannot be determined from markup.
  • Added $.jqplot.config object to specify jqplot wide configuration options.  These include enablePlugins to globally set the default plugin state on/off and defaultHeight/defaultWidth to specify default plot height/width.
  • Added fillToZero option which forces filled charts to fill to zero as opposed to axis minimum.  Thus negative filled bar/line values will fill upwards to zero axis value.
  • Added option to disable stacking on individual lines.
  • Changed targetId property of the plot object so it now includes a “#” before the id string.
  • Improved tick and body sizing of Open Hi Low Close and candlestick charts.
  • Removed lots of web site related files from the repository.  This means that, if working from the sources, user’s won’t be able to build the jqplot web site and the docs/tests that are hosted on that site.  The minified and compressed distribution packages will build fine.
  • Lots of examples were added to a separate examples directory to better show functionality of jqPlot for local testing with the distribution.
  • Many various bug fixes and other minor enhancements.

0.9.4

  • Implemented axis labels.  Labels can be rendered in div tags or as canvas elements supporting rotated text.
  • Improved rotated axis label positioning so labels will start or end at a tick position.
  • Fixed bug where an empty data series would hang plot rendering.
  • completed issue #66 for misc. improvements to documentation.
  • Fixed issue #64 where the same ID’s were assigned to cursor and highlighter elements.
  • Added option to legend to encode special HTML characters.
  • Fixed undesirable behavior where point labels for points off the plot were being rendered.
  • Added edgeTolerance option to point label renderer to control rendering of labels near plot edges.

0.9.3

  • Preliminary support for axis labels.  Currently rendered into DIV tags, so no rotated label support.  This feature is currently experimental.
  • Fixed bug #52, needed space in tick div tag between style and class declarations or plot failed in certain application doctypes.
  • Fixed issue #54, miter style line join for chart lines causing spikes at steep changes in slope.  Changed miter style to round.
  • Added examples for new autoscaling algorithm.
  • Fixed bug #57, category axis labels disappear on redraw()
  • Improved algorithm which controlled maximum number of labels that would display on a category axis.
  • Fixed bug #45 where null values causing errors in plotData and gridData.
  • Fixed issue #60 where seriesColors option was not working.

0.9.2

  • Fixed bug #45 where a plot could crash if series had different numbers of points.
  • Fixed issue #50, added option to turn off sorting of series data.
  • Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option.

0.9.1

  • Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render.
  • Fixed bug #41 where pie and bar charts not rendered correctly on redraw().
  • Fixed bug #11, filled stacked line plots not rendering correctly in IE.
  • Fixed bug #42 where stacked charts not rendering with string date axis ticks.
  • Fixed bug in redraw() method where axes ticks were not reset.
  • Fixed “jqplotPreRedrawEvent” that should have been named “jqplotPostRedraw” event.

0.9.0

  • Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts.
  • Added support for arbitrary labels on the data points.
  • Enhanced highlighter plugin to allow custom formatting control of entire tooltip.
  • Enhanced highlighter to support multiple y values in a data point.
  • Fixed bug #38 where series with a single point with a negative value would fail.
  • Improvements to examples to show what plugins to include.
  • Expanded documentation for some of the plugins.

0.8.5

  • Added zooming ability with double click or single click options to reset zoom.
  • Modified default tick spacing algorithm for date axes to give more space to ticks.
  • Fixed bug #2 where tickInterval wasn’t working properly.
  • Added neighborThreshold option to control how close mouse must be to point to trigger neighbor detection.
  • Added double click event handler on plot.

0.8.0

  • Support for up to 9 y axes.
  • Added option to control padding at max/min bounds of axes separately.
  • Closed issue #21, added options to control grid line color and width.
  • Closed issue #20, added options to filled line charts to stoke above fill and customize fill color and transparency.
  • Improved structure of on line documentation to make usage and options docs default.
  • Added much documentation on options and css styling.

0.7.1

  • Bug fix release
  • Fixed bug #6, missing semi-colons messing up some javascript compressors.
  • Fixed bug #13 where 2D ticks array of [values, labels] would fail to renderer with DateAxisRenderer.
  • Fixes bug #16 where pie renderer overwriting options for all plot types and crashing non pie plots.
  • Fixes bug #17 constrainTo dragable option mispelled as “contstrainTo”.  Fixed dragable color issue when used with trend lines.

0.7.0

  • Pie chart support
  • Enabled tooltipLocation option in highlighter.
  • Highlighter Tooltip will account for mark size and highlight size when positioning itself.
  • Added ability to show just x, y or both axes in highlighter tooltip.
  • Added customization of separator between axes values in highlighter tooltip.
  • Modified how shadows are drawn for lines, bars and markers.  Now drawn first, so they are always behind the object.
  • Adjustments to shadow parameters on lines to account for new shadow positioning.
  • Added a ColorGenerator class to robustly return next available color for a plot with wrap around to first color at end.
  • Udates to docs about css file.
  • Fixed bug with String x values in series and IE error on sorting (Category Axis).
  • Added cursor changes in dragable plugin when cursor near dragable point.

0.6.6b

  • Added excanvas.js and excanvas.min.js to compressed distributions.
  • Added example/test html pages I had locally into repository and to compressed distributions.

0.6.6a

  • Removed absolute positioning from dom element and put back into css file.
  • Duplicate of 0.6.6 with a suffix to unambiguously differentiate between previously posted 0.6.6 release.

0.6.6

  • Fixed bug #5, trend line plugin failing when no trend line options specified.
  • Added absolute position css spec to axis tick dom element.
  • Enhancement to category axes, more intuitive handling of series with missing data values.

0.6.5

  • Fixed bug #4, series of unequal data length not rendering correctly.  This is a bugfix release only.

0.6.4

  • Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y values are euqal) or single value data series would crash.

0.6.3

  • Support for stacked line (a.k.a. area) and stacked bar (horizontal and vertical) charts.
  • Refactored barRenderer to use default shape and shadow renderers.
  • Added info (contacts & support information) page to web site.

0.6.2

  • This is a minor upgrade to docs and build only.  No functionality has changed.
  • Ant build script generates entire site, examples, tests and distribution.
  • Improvements to documentation.

0.6.1

  • New sprintf implementation from Ash Searle that implements %g.
  • Fix to sprintf e/f formats.
  • Created new format specifier, %p and %P to preserve significance.
  • Modified p/P format to better display larger numbers.
  • Fixed and simplified significant digits calculation for sprintf.
  • Added option to have cursor tooltip follow the mouse or not.
  • Added options to change size of highlight.
  • Updates to handle dates like ‘6-May-09’.
  • Mods to improve look of web site.
  • Updates to documentation.
  • Added license and copyright statement to source files.

0.6.0

  • Added rotated text support.  Uses native canvas text functionality in browsers that support it or draws text on canvas with Hershey font
  • metrics for non-supporting browsers.
  • Removed lots of lint in js code.
  • Moved tick css from js code into css file.
  • Fix to tick positioning css.  y axis ticks were positioned to wrong side of axis div.
  • Re-factored axis tick renderer instantiation into the axes renderers themselves.

For changes prior to 0.6.0 release, please see change log at http://bitbucket.org/cleonello/jqplot/changesets/

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/gpl-2-0-txt.html b/public/javascripts/jqplot/docs/files/gpl-2-0-txt.html new file mode 100644 index 0000000..84ac3ed --- /dev/null +++ b/public/javascripts/jqplot/docs/files/gpl-2-0-txt.html @@ -0,0 +1,39 @@ + + +GPL Version 2 + + + + + + + + + +

GNU GENERAL PUBLIC LICENSE Version 2, June 1991

Copyright © 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.  This General Public License applies to most of the Free Software Foundation’s software and to any other program whose authors commit to using it.  (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.)  You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights.  These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author’s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors’ reputations.

Finally, any free program is threatened constantly by software patents.  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.  To prevent this, we have made it clear that any patent must be licensed for everyone’s free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0.  This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.  The “Program”, below, refers to any such program or work, and a “work based on the Program” means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.  (Hereinafter, translation is included without limitation in the term “modification”.)  Each licensee is addressed as “you”.

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program).  Whether that is true depends on what the Program does.

1.  You may copy and distribute verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2.  You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3.  You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer to distribute corresponding source code.  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it.  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4.  You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.  However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5.  You are not required to accept this License, since you have not signed it.  However, nothing else grants you permission to modify or distribute the Program or its derivative works.  These actions are prohibited by law if you do not accept this License.  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6.  Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.  You may not impose any further restrictions on the recipients’ exercise of the rights granted herein.  You are not responsible for enforcing compliance by third parties to this License.

7.  If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

8.  If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.  In such case, this License incorporates the limitation as if written in the body of this License.

9.  The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Program specifies a version number of this License which applies to it and “any later version”, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10.  If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

11.  BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/images/background.jpg b/public/javascripts/jqplot/docs/files/images/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c15505294720a0e1d83a5c039e05298d080e8a54 GIT binary patch literal 1101 zcwYN|}>2@B!mA47z85A1R0qH z8UG()kYoV6jgbKXm>F4^IDt~?0*nldKxZ;B!=)Jog_(sE0~47H9Tx_DFiM)Z@gY#5 z2#R(v0Er4>ir!-2VP*tc&Me4a&+yX?F2Smv5LWQ5=}zv;oY~W!Kj3zgxj6aa`o}LX zPMQ_4H8xve>t65JYTdkf(vw#wgjuPaJihhq@l2!hH(1x6DO@>8vGVXO?wVh$Yp*-q z`4iq_@m3(E&oT4x-0m2sZ(rY}&KG4}`&0MRmXd-ybEBDdDtQO*`u51X@cb9??WVf^ z9Z~n@Y$|xPzd=8*E%IjN;j0@jio9i5yH7fQ>e@{OuT8Ir&$0N(x-YD+>nm=Oh3C literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/basicline.png b/public/javascripts/jqplot/docs/files/images/basicline.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc6bc69136dcce4bea1206afac445ae996c0e8c GIT binary patch literal 17024 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/basiclogaxis.png b/public/javascripts/jqplot/docs/files/images/basiclogaxis.png new file mode 100644 index 0000000000000000000000000000000000000000..7c169633ac6e387f51c1f88400439b490b45cb23 GIT binary patch literal 19902 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/dualaxis.png b/public/javascripts/jqplot/docs/files/images/dualaxis.png new file mode 100644 index 0000000000000000000000000000000000000000..36012b23edb757264cb4c5ee002b7cb2701ef2ed GIT binary patch literal 29672 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 VabnzbKm_?Zq{S7)szr=~{tqtzUK9WT literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/logo.jpg b/public/javascripts/jqplot/docs/files/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a12fffcd5e43de9e69d5b2e42842837972123577 GIT binary patch literal 14632 zcwUuyWmFzb)8?(X+_<~DdxEs8#{|E>K2K^%tFc<`eLZDD61OkD=!NWnJ@Nf_a93mV%!ao9q zLqtMEK>8>1Pb2?R6$E)r2(Pse{=emA2!MeAFao21fs_Cc1`vz^d>H|d0stT&^dDvZ zBVfqugV!+t5RqQX313UV|93F}@J}HG__7XoZ3zH^fnfju@Q=Q8n?ZzPXGB~x#hPYv zhNit~`Wk`d`-p7A!Y{yv)`BoaUWKVCVV@l0WNHPi z*)!^&yDhdZM>yTE2EU{cK#x&F3C18Y2wfMDcF=J{UL|=_SQKJ#tp0@@?qm*_4h*HY zMUL-4L>xpEONxyf0(Dd1AX8u&j)rSFm};&8sz24Tb}Imb$we&)e)U4CwCxRk9bhT8n;)Zpvo?L`TI!D-nU0 z8NV-(5upu8&>-a6`Mn@(kV0ES@eCt#vqJ1ZC_JL%UGL5o$(JYMfS6~kC$$}L<+FwR z_Qd`z{2%croo97B^*~vHZJ$dvs$YD5uAU`hZMEYkD|nuXbe7r|_4_l$yZQ$3vlsFw zMouwFXBThJ`Y7*5FBl93zZN*5v+k%36d_CGn~%ZoDU#I+zB&GCt5`T~W*r(ff~@Vw z&$u{7`H|2QbNGm!I^mN4eCe`)A{7VBU6}F?`~} zO#b5?XTVe-O<-lg=fu#JUqT_6uAkoQ+wytWczq=`tFvlH`#QxhHTfa7!N-*MXRB~6 zItQr89Qtj|YmLipSb?2=Kp$yf2G+nqFj<~6?u%uR@k77)63n;OW$qTX7`#?kFBJtL zYsc@1#=LiKVve7XstuF0wz+2%ADb$u<(q4o8i5lFlKVdOL5WjQrOfgaC(ca6EsBEJ ztjHQPCD@R1!Ajmeh5MTo36cKPEQYtT_`DV(4WoYt-}@8OMm_EzYwUpYqut6qFm}qT z$EEFPOfYVCHBye%B zSs0_7nzd0QX*etT+%(OKQ;xVOeQhCEMCKz7+C-)a(yeUGKqMpya>PREfzh7kkQ4Uy zQhj7}4HD#CO(R*w#;moWIRq{-(Jl&WVv`dcFyanlcMzuGQdowIDUN}n9GwQH>f$Jl zi>eF0sEJtqU5`)r1W&+t78^)4d2GR=>)_tca&VED%=g>>robQw9Qc1g=`{<6!oe`$$tgH6 zu@G?Bd9ZQuc=^OAsW@Me3gH#NfKX5y1%d$uf;cSf^}eVt1%h>)EzBl_ZxhtUALCZn zP=O5WCRwI7csb{zd9yuNIzDUTG@n)*9=B;?`|8Y|?DtFT#+j8Gy3DP-C2{^^z8mMy z@tXb~@BX)0ar`MucySpS19x}#4|E0|!_o>wc69H@dI=Z4?Dw;E-c|N`E)oO|o09}e zoi25I)oJqnj{3F6;_tgoNVwnJhd-I}9pU&aA|WAi*gzP6jN|e(J-O$w64H)#_#j{2 z6`lT7gN51g-~X{c`ZZ-BQl4|dHwH88iQqM2G-8t&QW#Temh`C<$H0@Hl#i!e(qhxl zmm)(%FklPt6%@ogKTC*kR~#G5Q6AF|XU)34#uLt=(o1&jymOE$pXhUVbp7MsSW@RF zVQElARZ=IoUsO^Q=P!(ZZ;n4cOjez$Jf`%;{-Hg>KQ?HIN~WLnx$$0i&DFWhY3SQ< zY&iO5Yr|x8NuYI@MXEQDR&@ZNrTK+1o&GqYb@3x7hu@$ zOX5!BA|gRnvg+ShTq?}KfcMr{XDlKj;&pVd>qSKGjncEi4c~qDWis#h+BNGzZWZ79p+88g zdZfGnJmbow7bZ(Y%jHW-;Lj2Zsbf{CA%({uuW^HXI-RT{4okWSsiu%QMT> z#Z}7H#n-4C_?UJB#UE#bMx2F<@1@7jh2Xa96o)7fhJW}z`YTSo0JM}5d&QD118JW& z$Ig&OD>OBi>VM$>+~Gxu=%*ui{(=2SfpBb;5LYYE)|9S(d#%;R?-AqRJzchyQDeIm z=(?q;uEbgPZCW-GX;HxtrSrVzkMZAAHY9uL+W#bTcuS@K{k`){Lf}&fQ8S^j@~%Dc8y5lD@gdZ`^#B| z8yx9!08+47UYmG#il>~$f}$U1x$(?)IB1&w1wgfTqWwjLn*_yDqiEi9?hZLq)$>Yb zNxfY(>E8T11qIuze`8Uc^{bfU-v_j?a(Mp{@DEEQwok6ij>=Aqlu7XPJsO{N^IBZx zyh>%Wb+dZsOKKw@89JfR*5lW}w;k)mCEQDbXZq{>D0rssM^HlPSt_^$Ai(H)c(~-WAmV|`v{mpx( zic{msEUAE4TuR-Kf?9*VP~06=C54>WejNX~8wH_X%LbL5no``JdWGfrWF#c$VN|c% zs$_d{jH4*doIq7oWlThGmsI5WHjxaq#wpW$_twzLakWwHbj%*c>3jGivo&|^^zq}n zuZL9Yi?^H0pq>B`ihA=~V(zS#eM^HCH=Rn(MjiRzpI!PXGtmj+zWr1T&sgyH|D>7J zC@rEl@O5&J)6G$Ce77OykT<>_of86v^73>!u7&1&bzpg$8veCoe4g%IdZSWkVj|qA z){@P5U8G`Y%VcbsF}Hu6kdP2l=bYii_=a$>+9a0D(pLiw%~49cl9GCTiC2V7M=>YR zJ}w~>)?&4f<|~&I$9Vr;tIp#356b4cBxN#oa{X3pfI+7KqIGmqb^?P`i&~6ILezt! zFHcp|X}i*9x$;S*Z_TaW4}Z5cIyxqcY!Ecg-I0)~NJEfy1848-yt2@hzOXw*ww1BF zF7t=$k(4Gcqcnv|LZ|q#b)`Rr?<=nU=7>kBd_|uK&iYvc3gj>f>?kQp1_lNURXKYp z%Dwb8N)#VFEmBkkBBJM9vcC^6fV5*C!uQ?cmXiU&nQWd?G2b)E zSIf6@QW$$xf9jv+NY8ZBS1kOPV%$akh5v*e!C4fKii$%~R9rUv>jm(79CBj-UXMa3 z2#A3Ezg=`72n>N@0N^kwIN()PU|2YmVy?-T*ql73&cVfvO@nj)o{6u1y$JA19?anC z$5Ly6Q%V*!=I9wN>w_wU!lcr-JZ3Y+-Ki0%xS(GA?d#0ApO9S;89!|6CoHKCT+njvRBR4{D{`zxHc1JLisg z7nta!b7P5|+%`zWKMYGo^9+~E)bzu<=k8a#kxKEhhGW!x{PSBz7!RaZ(igcfDJz0{ zmD6ng+e+>11W>AP_X4o^!-eLas%lwoC=2Xk3B1D)tYPNP_}&ufekr?6kjtx3-GN7a z&JPX_T|9{i{e_p5jw8l}(Kk*UY6rmqXXhw0#q--{PQGQOIHZNa_VTVt2_!OEF0 z^7QOYe09TRG(Li%&P`a{!SQA@Z zqYAA>WU#4FrOQ#S={HXN&!G(qd}^4osK0)yEAIz-Y>Ra6y#SN~TQ(36yb@S3mgLOT zCPA(6smhZMF6{C51krg)#=ndCw_O?ZKEBIAg|bACOIsU#LaRE_nL5hR2V2h0yrb%s1SkDkL={Zf z>RowdcLrQZHM1-uHKP*I%;V~+dK@t-r(Mn zOGZFnMIo6>Q18&Yf}>%5gYIy)WKO*hxaut#x2GSbAt?un]f)&k9z5Ov=L+u7Ut z9qrfYQG)%m`oR!55E=vp{y)>z+rKy!mugDOkK!1aj4k2#8uQ>-Gh@Go95uT zMT>B$d3e=LJVH`Z2QMYe+|qXUuKu^H2qyx%kL>F1QeWC&?W=?D%FTFSpFLZ&*i$EP z7`{~BWa4tnR1PZKd8fK>;ESl*s^i-Nf1dXOsMJe{&Dj!cSKUjMRZr-pvDxk6tLxZ| zI}-t#%cBW$_HL%dY|CftOLUEeXtWb6b4f|AH&rYa0-j>k_0Xektw8xku(D~JNU!&k zlS(Z-Eq-DV-HF+A=9&86WaX58e&hVh&i+S#U^s?CS1A!})JOAd@>sJn(mzd>PQTlH z(DKvScT)MHRRGS;uYKVbV_J)ZW$E3wt|4O03>Mei>#F39K1sn+d0NJ{DgzgzWs=`hKC0F@5%)yHB!w|Z9B%U)Q>2n%g07=`d#wMSoJl*0V0;B zYCnE-rfvO65cxUNU|h^|4>dEEb-Pltpr&M&7#tVIORE2#u=0fdRM}S;%@Lp{jGk4o zZgaRw|ITrCUuCaKOsXwq>(8ndMNGD06+z7PhN1HFhlNP#USg(5nM66YC`4?%_uq5Q zV+mKnUGFzc`&(8YHQV~dMZ9aRY~FK|-13yt3Y!*sOx^YjsnlO-k)eZFsL1lQV5h0M zHEsD!;0U`)y=NZiR`J;O*d-k?LfXQPCrr66)Gmbo{+B7)TjQ|B4rE;i);4`cl9jq; zI_^YBj6O`I5T|;%*@I~&D;#yCoAB*Lt(M@w(0T7M*d%p{5sbB4%1%n^X&^(rKI?7>Xq*g4- z5eMVxM82g57p+el>0Z84^1MopRJH@Z<1OVy-|{I-_wCk?<|03pkMDhI{fqH1>d;55 z1*sYHru$CUhQ3y@q0iJ3&s#y>MjUko{*CGncluxQ8NOH)RJxmNOWIu`>FPFU zL?-{vU2JJW%7_(kG;xx*7> zg+iBD<9d0AGzr3G+f89a7MHCa?O0KA7S88e(#_HzXts}MVwAkJNkhtP_NAHiFJx+~ zC&Es)_b>9Ct~`e!rIioVg9}Gm8y^s!_KJSs5-0tYX`L|1MMTMG==TDM9YR^MI}Xt? zGIOUWaT(QC?lcRU>ML{7qt1IAK7LH7g7C(%!(;cO9(RcQoc$(^`k7gL}dS1 zHU4gBFA(fhpYvy7d@^GO*LN|s+|N_>&wNH14)dwp&&n&>F3O&Hah{z*MlWqoHEDz>1mc|=zmPn5>(K?>HbN{`F3&@+Vae-+8=7dATDuSv*Sqhs-uromn|ghjG$8V(`F;P-oX4jHWzQ9P zg^d+6W#!5~s`Dy@5ec>;a6{=ye(7GvX2k4*QB^>zn={uxfe-7U+`7r z!#I8>p#4=qiHGmF`Q=f^Gro7MW56EDa0ga8vba7G32!E^ATZmbFAA zOHWRMsgYkzUCOy@6UgrfhsbwzY$;i$8M0^6C%QN{w9`sX(a}za_M4v3d8%U76@^Di zKb7%AuMde)&C$wQTB7K`(h0OFIXDU3sWlU`a1HA}mn|nRyXxI-{m~Gx@j{BA4ycXB zOj$oTa~x78%*T%EaN{u8obXitY}2-K?MC|74aJd5Sq`IXkCPueGp7SjjM#hDMs@FP z6tP@Kv4mPPH4f!NH>z-#@7v39x5&m85yr%Zoh4h)%uaSPZZcsFvrA)c^8esIT|Uc@Aa6^N zPpikYLw&Ds@1>elL#akx+S2U;^gkmDKhI;WCy6w$y5H~_B(1wiT4)_w3LB3l2<13Y zW+zjOoA6`l@bA?3Y&d&SGWBM zpD8$E)$o^wYt4bRtS5LNE!a8#0w*j^^H@p#8CeoTonw?zaI+nr^Jyu(6&Y`>ByMPA zLV6EP&wPGp;vv1`#@-`sqsMm*PMW+7#>+w*oD zr&?sSmKHhd+xT9Rj#|MG&i|@?c5u!7<>& zQoLk*i~I;NKJv5^a{fxcTI#C#P(v2cZP(Fdj8J#YZIeaokICO`*54gi@hO{WlvxVP zJmR+J4%(N#t7R*$svNdQ3vktR)G$~x+!NnFpN?ZbhGK+<%gr2<-ZBdrYdR1ik2UmY zSu9dy=*1K_05oqZH{>@^$jy??qAMfHsZ)Q*t2>mRs1h@w42;nbVWpnOSP7ORs@qc| z>yX~)OZUHbZYIKrq~^TTod`JsG&`W$$5}PvGjcQ%5G|E`NczZJPo-~UF=0b<{I0BL zd>bdXd#vG&h1pz@4H>s)IDAU!MpM{^{zklc#>)LdL7;SgLY^H5uk8M00#T$>Zdif8 zyR$Ghp(z#p(Y9gfx8K?6dbKrWnib>8F8Hh$w44q5b`1g=Z%}13Y5YE;)poS%t)(e_ zE!?PV(34e}|J5Ubonon=0;nFa7OLeY&BfHwlG#wvL#JevJaKfg6fADXF<}j;iZ0orj&n|Z^ z9f!rJGED}Lep zCHvfeK8cD@j0S>shvnM8_ul`CfV^+k;14AcgMjeTRnwXFjJm24DEsLt-r})cFrWy( z-}spOG+l780Je6}Iu0+;lh=#oARep2_$)AaDH@HnY5p6Ltw+AZiinip*Zvt-2N%It z6%+&1H1kj#M)n~t*)jAeN{LPE!K~a+Vm|M;U-*R*_o`7;HFWXcrRsK$*YEw6K*2*1 z2qA_I*@lr68kqe3dI;Y9)sW^*OOg_*z@8>C_C-am&*+lsaJl*9^gHo!6`V@Tfqc*V zRA&#w+%#LKYNSt)nsg>F465Jw*S6B1!%7A(pkq6NWDu7*WP^&HFmXp1On;PURn(Z7F`29^7d3M#L=$8efP5uq=FRSM-VB+k*b zFmAGgM|-yAgz$abg^M+Jvs)8t*N~qi;0kkwiXLgJ>y|L#_!!9sSt0Idw^ zZo6!U<#2W0l4DzwOajvlQNrenBMYwtqOx}fQaG;x5lz{TM6nHd9E`)COayU+a0rv{ z2PAV{SZv8`v5qmClQdLvvCC^C#nFrh4TQ2wI}o%Gz1oo=G*ainb7%Z=DQ5auCTOpM ze_H!(EA_NT-=34854+C9lTCAX8gwUTDN{Wz5_?&AVi z#y`z~VB5@vGZAW2+)UaPtyafzDTYZ$CYPzAu&8KKWu+TU?1imEzKA0Fn~|>5sDo)y zHqWRsFB!7#0F6cykbFOvP;zf0a(I8a3OZ~N?i2N`=?d|;1mh8?9PpMGJCET8L(xt? zktRuEU?o_V%(lcd;eYV%zhJ5TDpz9;=kjSfcEK^^$12n~eUE0H_L~}+_lHp@Zjd2b z{~Uo|U(r3!QzR?xC0WsPR?WHYdA|gDWh1JPN$uydk`kWnC5#u?7AkQ z|C_NQt&~CI)~G|`qHR}D7|LW%aj{S%Q-=fs%QveK_6SEU>#;7U2(){Sr;&QZi10u0 zo_pF6d>s_``3PQIemmrh8t>%r2jO?bLY=Q~6Y}9>c@te01MwaMNr`Yk1_w@Lv@ZaB zM^G1saGHoR`{Bu*gVsHPwkVtW3PTOl@PkX7PdBgzo&yE%VFwc%<>~%dGp-;c(E1?( zrzWFBWGbMe+_Os!S0wFe+`^SEM5O#{9Tg?aJixU+KKS$7;Zyho8gClrJBCf!`NhxA zAU!WF<63Q;6YY)__N-q^rujjJHiVP$82=aak2XG4f~f&{Pq+A z!YxnvJgK^5ArWk0@;KwGw6|a9-z(9BoYr+TGu;+xow>AnS}jJeI+ow#5pLxL zFubj)(dtQI60Z)>K)I^?Vn!MV-b7wD5vI>iUZ1WF+45k*ybqL-4gKu6%~d(lkr>)B z@axHZ_C67|Hg4od^}fjDuZf{Z^Wk?B-U=11lFX_SWN&SLc7>mkMTcsSk`{6AJy=cL zgV-s46F}cbRY;Oy{bt`82_BU8uH3Vl9!J5Tf`^6JAMi;;nFdGmCcFSxI^sCdG7zPD zWjw$10R%B_45jPMZCopKDVMHN;7G)os&o`9=dRlOvN0=WhL|p;6o|h7O1paHOn1Ah!2%;YKsop|?tMqUw%?A%L3 zvLJ@7^z9NeEb!fnqW+*}nH;d3w(8lDy}By)yW+8Ga?ZS@_1GqBa~XxxK1wae<#+Rw zJq^zlO`$*xMZ$nwTXqlX0GWc8`fO!>IugcC&T8w)L*s*}_R=_+<{e>=pz=A}EhqEt znr^wJi3t`cR-j4(oS=i%I%qH3KE_^p`iBQPSJyyLVa$onIzd#D!467GJ1I@(R=0St zg!F~ZOrix;?YtM^k?H-JsV>Wg@nfr=yk)9E_10|41Wx0C-f|h9Ybz_Mb7ZE?fj&`-;u0Ivs)dnm;OZdk z0bSk0ctpB*#781r$z#ZW(ZPr6dlcWa9mLshkv9Pn+o{dM6y6n|vhv0x-Q}%h9EU0y zMjw722)EEQbB|(^{S-kc&WrQ~04(3R8}?{EWww?%&uR)}mXk)QD~UD0J)!CHd|@3{yD zM`8BS_&b}rQ2mX@IN(QhUM4b$bar`lF*=^vD&OVpYL1t`_qeAagI1-ntNtDtuA~Uo z&1CM(Z#({qlYn3nH`x0@p8KtJGgF@Zdud8F`h@4sXq5IJY|L$$AZyN6`;p4OJS2x2 zKU|Jk^?q~Uuq?0G;p_T3TwxioWL&7oX4{tMB&JAuL4yX7&AASXKYsaJfZ(y%6?5dX zja5m!SefpU#V*aU^NjF}V{+&zjWQn8ss5i|c>w>!(qSBu5P$@+vkU@wf|&vd!6k&) z6`8%{3-K&6O0y^oa~Q=L4geS?j&{{v?z`Wa1QbH}&7-i3kx|GMU{q1`Due96Y4UkV z069GN{JNL|0bwB!J2jD6B@&xFn4DbtuDI?l>4vGZ_ z*|%zMF++AvU{t&8mlapC?2N?|fU|Fgn(U_CI_XeBm(i%OGzoFy&5OI=X80dT7y%QL zR&-R|h>&(6G9n^dg`h9S9~G~}g%yQ7*^=;D-3HIK7?cJz4K%fv`E&A6MGJogZ@#$; z4EvV}{G%xFbxy$m@c&U1z#*ohY6^39`EQH@_D3el#FL!vIBjP%La&-J-wCrobaH1v z2f_4RF@tcMI@$*lV%I@>bV-i4xcPZ^4?u1hh%hUy{GG($I&NX%?FW)aiyIKQ8!mN* zq~J&>8o#ixFf9!Jn~V*?yMaa#8Rc&}jId<@J`KYL-T-61os?D*1#j-dpv}Jc=Qisw zIf^Sg+ZGx)ImyEBn16=zaZ97{L##?3J#LW9b#T^s+zPD2j_=(+wuBCF#gx&M2v-B3 zCSYw%Z#{H(dgIl2g{zc6$$u55gZ-oKEAjas^79|+^DpyBh82-F4$kdfUj3K*z_glO z84Xu&9%9Zq2V^YvnEL2W^M`K)6t$Y`KZ|i!Rqy#zj7C(2Ro9ilcc9ZyvjSE}nX{_v zdK6BEtf3w()ktY@#n$4if4LL}#JasF$u%DbbhM;coJzR#Ng-sQf<@t)<4+ngeC%wK zVQGf9S2gt`*kvjxyL;dDQI&;%gcn^*1xS+@k!INHGTvli0GmJ!aKADEreYqD<4WKJ z2VC$&wBR;YesI(*Ep90}tNLyMS+rnt(oi#`lMs-SX4 z?Y+mPBGM6uej(HuP(1V}_LAddZ{Jvwx63Ev9HR9bZEStSPLW1gfZoH4KNR0e-g3Zl zsyfuEQiPhAJ%cgI!Ez=w2Q$O%nb1Ig57*$dHv_%t6UMc2X*ugE+^F!(rFCR%2$EQ2 zW`{kN1c4I!P}$(*P?>7u%%DJ>K}r*n&Xasf%mb68mJ1F%MrcGKJq<-Ex9Ez~h~C*i zFiFa<>P=xv#rzb6a9`;*p(G+_=P4CDU!OC|EfPX+AhKvh#Qt6hWKg=KxTr4No=ox0 zK(9~qpQNOVXgd^fF0vgr7tD)~15TktSsEWl=eX0ivSIV{q(l>A zX7clkaK|rz#isNZK$R<#EUQS9JxS2u2wsDmigxK6^6>>k?ajj%0C9yb+4B~wtXh?( zw@IVeJ+34({Av)5q)my{9AT(Ft0YSZp|2|~|KZMVG#hN|^wXv5Uvob_Xi$T*frxZ6 zsLh+QjD@+fo$5`2y(g^3T0fP|PB6LIM8SX`yNLlK96F!5fm4w4X+248Nk_Cwa~d4U z*|5*dht4iPX~NQ(Xl4!69hn;>pA8=@=eZMv74;jR0%ijyORJp?7qxcO5oMH>=Et0w zcJ_qyjD;Q&z6B$dT7(>N9oSKlo9{BMqA~}%xMmC<;@R7+!}M3)Dm@<|!#$0uhdmlJ z>g@zeXTVgtAF$cfh~9{9kZbml ztMtf$njqi;#HrSynirK9hQYUjygCGKnNCdb`Pu!LbinIlo zzVBWzE2PFomg-he9OqvKdc(m+GL8igD?sH8RXwe_a+n;vS}y=}lFpxhqhyp$4G|cO zW+YNo*pWs|$Yb=5qrru3Y0WifB-xfCs?KXobC1LRkcP}VBh#dI8Z&0UFlPotI~6oX z0(x{FjEScx8!LbL4f%{Z=?Hi}k)l8Wi1sZyJOH?JtPQo&Smx{(O${y_R1GXx&HZwJ%M?B^uu%%b)n2MrgROAqK`N8^5R@F~NYA!ivtZd3?X6>r%C{1sPLAb2o5w?6*TEccyC zVs2Wqs4d8BYgT_UZz?cVrd9g}|C>(hWgYtQM>M~fRDT6j74a<1$9Sm)mJ1-j>z6=bsuzH$WT=wIrko|_QpN)>->m{2 z#aoP4O}0OaG6;Azei^w2BAh=fmnaB6)QhMDC5%R&WqbK2b~;fG?6flMc0iOw*nc4O zV&#RNM`ax4D2UgCD1UH0WH5HHE|%oP%2k#)WJ%hFlecVFeRg{;Gh(IM8c*l!k({HM zE-vg-prJ|2H!1lH4)2_Tsq#9vTCA!H=ooed9d(+gv+qK=Ecz;(QloE4ICLtgcU}My zVrNl5@&hBQ-7cgkgjFn8+8AXK`hf$h)|dy9Zg{HR)4YF&5DV%HR+5%ZKh<+=8OUqM z2dM(6Sw_gAnDST{X!y2@7*7*Htq$ABqBe+RI#PD;3c{r41WVA8?P@Ras zWp693i*e>u;lXS(Dz^DKBEYvOpSftXVNvC#I}@;)ZXN-Y3~0# zawDSghCh!iHT32YDb2+h{Jsol-~>E?boD6aEHW2mQaQ^qNWk0a3~jp2{?da)BkocS z&)$X+d8us@2B*RVM>5*pSq=!&yG`D`5zNeI6tTBl;VwQ7hmAF1QnORYjk@y7xxzOp zu4#S8%*!c@tYUq-^Zf0HqrbS-Y@v{Z?7Ek$AT|2w-ICVcfXFVBmhBk321ULe1=YR^VMnMnJ zLDXivi`JLZ-`-BDE5V5D?m8X`jw2oL=w*Bo=EDclqt9bcjfLp%`&HY~l*dL`bD^tY zSn&i#YY4b1yD6>HX|<~fFMv)3A4RxB8^(SviFOzqBYIO$eg$SgbZbI1zlg}-apx>k z=f_H1JhN&NncNqE#A%CIX39mm@UD$&Tz_Q7H_+?ptFqdhVD8L|(~~(?N6ff$HqDE7 zR5>4!DzN4eV65^xlNwL+@LG>4Tc*W{JYkYir^uRy1HUGi$n5(-A>9`cFYsoAS)Qpd zb9NzD{Atfpz93m6q)x!nJ*^RrPT~OtjAn21!@;BBGY1h<`JhG{6^Dwo!Jj-UvaqY; zoT4xyzZI77^qg1~rQ41i%WfIdZW$Js`QY?QeZ|Taf7iLbd6wtKmqLzdtyi zL97dC74T|KX>!#Zu6kK4aOvB^1e(iw`GHssQ>GnffKv(#FDSj=nh?}5r)KLA z#66kCYzZ!v8wwB65Tvhb6G9dUZTstb1YO*phEWL0hlkso;u(=Ck@10+1*xJA#A<1& zqAJ`>H?iO8E*d9L$hp--)N_HB!!@Hx-^na1~IzIc?}}3whr#=U#iz&K)dC zzoW{yb;{)hVEMi6aR{CfYCv`k`J{g9K|XA1A|I+T*r+js-^Al6WnNi)UMZk2C+hf+ zCY|@ddfGEu4V7f$#nGpKfOYSt)kkiw(FMBJbn2t*Is2_L_d6R8x%h`9KMGJy@rzJy zU$fX{`@tSCSM1xIg@B?W`V3*bXv#7pe;_dntWwkPU6vgB)bL3@a!w=1L2G3+367Ie ze(y3WkhDwQk=5~dXk%=$4Es{?mSnUs=H;?DYctLTnRB*x70suY`k%|d6TGXWp{ETV z$~;HHKnf{vmWd%1{M}GZ)J%s@9YkTRmaa3%ibIz!h*N|->_|00N6@e3Z2$JkNzgI@ zi}PC!w|9zK7}DjMsSgufIO?Ac-VEhk;RIQ+_(X9yEh|ChYC{bmQ<^PXjK6Bg?5tMt zURA3dq9up?aMbE%*oI$D6453R56=|q$q3vQYKyQ+2Bwu6-CRfpNsD5ZE1w5gYw^zn zX-p6|>ET|C9%(U8>Xrs~`cbIiDB^rrB)T~0J}m#>1}zj8_a||@m)2-&9=F2uLu~{J z8DbCrrw;g(eJ{RF+uI9zC^F+OFV}GJ;t}l4@GRc6k~WgOepH*+wSY^ZTH+ndbTQ-k;YmJEk1a?iAfSBx=S$)8mlP*3gSP-HYP|>#!gY>7i6)B$ppvT z_fHeArRKC;&=y(vy3rJZWL)gg7)eY85>*+%tei;YJX^lz-*|aCOGQ;vYY#%^o)JK} za1&K|JW1u|a&Sq01k3IWpL8E zmlFc(q+`QPN$*t|=jC3PLPAMDeAL^WXGQrPaItlOf*Jq)8GwK^taxo^22NE02TU=WeoM%k1x+eov-t;^d z?~9#_8|W1RZMQ2gvBJJK`0QC#(T;E3ap3a{NisGTUki{JILLSy;mG~TlKxn%T&r7? z;^q?3a_))x$MQQH*d-0aX#N2IdP{QcqMh8Cl-1zKPzH|-D@vxrzI@wxqji5#oSf-X z{0R3c5-k?H>iH;$>K6L8jJ}Fd9|QLqH&`*I2sJyH66|84N9nU@?9o`oAv|CshyATc zpBKC4P;>EtWTKNli;nsI2m zBppZ#J^TlHdfs{X4;R|f#yVt1svhdp?b+#^l$#hUijkIB`*w==iPcr>&>S>;)4*Nn zjP6nVjaGeFexDJG%AN$#{HUPQc49e@==$wRA!G@p9aP=#!i^O|Bw&|M$+)*lR^oJ> zg#BqtG}!787m+El4t8^BX18Sj*ltH(y?@=Tge)5#ZmLpyr4rt;J7f7N;xZ=2-BL6l zYN9Il(-1F6FX1f&GA%>~4m}H`G;Xb9{E-_~zIX-eaBcM!MNS$aI??=7q>ZlV8?mh*|M*V<+QAEPFvWf15 zB3L^p*pV{U=NgVwj_AeYkzIJ}?(k|RzDy>hPjEPz%!nV+9w3LTpV^|eZBk1GskRY2 VrGT(|g4)pnBc!xBpXFZG{ufO%d{Y1b literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/navdocs.png b/public/javascripts/jqplot/docs/files/images/navdocs.png new file mode 100644 index 0000000000000000000000000000000000000000..318ab04ebf00b044ce63572fada1b32f4eb2f58f GIT binary patch literal 996 zcwPbI0~`E_P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU1_1*t5+BUqd;kCdB6LMqbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;8|jZXjVGO<`k)sCPpE00T%#L_t(o!|m2vh*nh; z2k_tIl!js1OK2rT=mcpmcA@AZQLT!eiXt*HgGlnFY-)n&Ay$K=-9(qqnp9cnE}I>?+=G{&VR4H&RTozwf3fsHri;TjiJ#o z(g~%MgM+Aj*oGxo6cGnUYV-fX3CF<3NtldHlaZf#= z%G?Fmg;Q}S9zj2*M#Q(rJ1{bHxs?`UlqLgj<7dn&rA%uvcV|TW7!m6tq6hD$y;;XQ zr~!0V?{DEr+@#6eOZnZ4>xW_M9o&v9YqFFwDHkp@nJsuQB6bYYyCn6d<9ED*`2#gv zN*Rym)4y@pjD-=gtd&EDYAz!7WB7=d%GE;#mv}h?nw~4YJo(;I%23Vcuau`%TsJ0R zD=xiGFKISDqFZ%)9m~vJw;4<{#npO^V4*KrPN3Qfg`F?UPME_BO zJ2*(nj6ruqtjR2OVfL`(O8@RJ)mh`V{(zc#$3#eh&{s%?mkWT zTb~a6ko?0Dv44onjZ3+!;?7O^WyO7wa!SRWm2&d{5fRS}vj4QE=I+gBE0&Z}o{NZm zM{?-URx72P=hH+Q*m1~HFP1iCwEcGO_koZT%0cK$i@Cpa~$<(`oP6F53_U5 z&3I4Kpk_M)I@3^xCR+zm&csB#9uaF>1T&$OGDcGe*I|yP-rlHmKFHt}l~R7q@!lL; zS?PV8!ObtF{DP}A4dlPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU1_1*#Hlfs<^Z)<=B6LMqbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;8|jZXjVGO<`k)sCPpE00UA;NK{tzR1|^HW)Mlfl(V%#5X5E|b)q1sFtt0;zC}R= zDG@#tfstYss97x*(ZzDYalQ2LJ8Q$A{kOZYu`mBG3}@#2&N*`~zjJ;+I_RK-4mubc zT@zKP%Is(h>mc@EE!N~keRQHW|1TUj2{ul^e5}ILQyowfT~L)-7q(#m7UEK@!-l-5 z?`|qIDt7_);bh!_hj0Yv=SBVXR0l>>F1FG$m?l-=P5gx3s>~L)(cPOD_4j#EZ_SIk zA8&`f-l-011k)SuZ{TsR@o%&N@hMdB7qmHiM8|@;nc0zSe04ckn6_BxC|L)<1zF#?7xgVacUH00oGMzcJ-LS1zw1NdLq*sg1@>d zv$2NHpFvM)@cJ+hyKyJMxE{l}rkz96TfT?m z5t**y{lrMbk^czpXbTk;gTB0|H%FEFFo@f*GS(LbeIzgH?bu$GS%xj~-^0@Inh{C* z63ekXFX{v14enlP`fUpbz6<_?c~Ku4qjEEY?rZSQ3Ho`1_gT>H2Jg(EJ4YCKQ9spU z|4FIm?ulnN)>dU!=0$yQG>49DwW`dH_wQEe3j;H;DKF}Gjg66B`=-Gg9*15N)7mZM zMg5#qwb$`G&cYLTshv)Mn*+Y`xI zfT2kC`_ggLFU^6AaW0mI&dqp78c<7(g6UzXORCo4pi3|ZujEC&rA;uit1_D*^}%&m zCiUBE4Vm{MxHVOo{Sxb|V{Nb@_fZ5lP?g!wxJnuze}vuBu~E8o%)zUe8@hG7Y){7B zvWZo3ppVF&CJlwTEpp$YCok&#A$K;uk|t&okLE=^5HcHZ*C_ui^P=t>g+D2G%LCYo z`|xmcAusA*r9K(NU)V3*WEPDC7IM3!ZT*FG5#KAFb1NI>mPvQlAsoUF7-;=x2OV_K cK?f7XKL>mBqVIr&G5`Po07*qoM6N<$f?Ma)NB{r; literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/navdownload.png b/public/javascripts/jqplot/docs/files/images/navdownload.png new file mode 100644 index 0000000000000000000000000000000000000000..41723e77d18ea25299c4d8cebce3fea7c5adff63 GIT binary patch literal 1236 zcwPb21S|WAP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU1_1*M1rUI6SO5S3B6LMqbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;8|jZXjVGO<`k)sCPpE00cNmL_t(&-tCxsh*eb- z#(y)8qCI?|1{Mf5=u|dEY7fK0Khn=2ijpFlN(rryq{Qg~7DEt8&h)^F0*UEeI7FoW z(Sp)SEozd19G}JHNTT3KSyQCe-2T|>bT_wq=bnpGV{ksWeCMpa_TFoK`*|*8$dDmJ zh71`p3?!;5tzc%k0@HDz8(0IhNXk{(=0GEgalE9S!S1hm0QwjPOa@i~PyO2o{U1>S zU}jZ7Cr}5}12chFfL2L&m8g3Wa1+LNV?4(XL)I`s30#5+f5oYoW{@x7COVQTbz^%a5vC+&X z5(ZE}A7H>TNe8@q8!!zxPtqPUyB_!e*ePkM`@9C+3ETm^0UQCY1X_VhfGt3Sq{F3x zD;G!Pw}`MRCjq|!9|KDy9g2LG0!@UKys(@wfA7hXj=8V^Ex^m(iOg(H3Xyj^PmY2a z18fH717`puft!JiW_G%}edc_H^9<)YGds$}%5xBqy zuOg98_z%K}|LV^pD1Q^l6)=RE1JEdGtE4TSaGcO)uanH=>4brXu#F_M_|t;^R!Hgu zp7-~0{lu0g4kRrGCIBmZ5W2l+RMgg`&P{&6KUS&8_jrSyKpSwc+aHwlN13)pIvVUI=wJ!WL!j@1>VKYLU%sDEXz+2rPEtHc47nt|9V!@t(+bB1Jt2TSg7}LH!8$j{axzG3UM%?Wc;v z%pL{a0nP`W1#T$fmaNpOg7=b$N526$hj5^50`B(&mZuczTIa2it;=~vWJ{LY?#Pzx z%L|>i0qww4_wSapFJ&CXkT#C{l3XM`PFP`uIOsgdxvpI2@yAFb@TYSFa5nI&q>d7G zCz#oAU^pygg}7pld~4tsgCm$elUc{K0~VKuY^w*f=>=Pa%iY2!!^?VHSO zJ+Lwk+?w85yJJSjW9!d315b@CG{4xlg#F?ojV9C>!d}lAdW?Zt@60%G>`lN yd6~EMIdC`7L)eDqyU-ajWXO;qLxv3h5&i<_Ibnja1JdOH0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU1_1*$DF^Yw!Tvup^e`z3C9U-lRC*v zo=q5N2-`?9i$5#qZ;dv-3wTc6Ckzl_sCQP?0p|kmi14!rTS76B4+{TO zB9|CtfE6O#7H#~dat)E+i}y#iQz_~} z*fMI!59%kt_Y6Ffy>Neu_EW{-ta=o98<-9}1Ke1|Em^5m1@9#hkA5R?KH)&w0^BbN zn3O_YC%hxFbqmjlY{_!l7uk}1d71D|paYmG{yp0GgDK-EhO}|qm*k?2f1I$w3UNeu zif~=I&f|}fCg4xuM&LZ)6>WTHiMo@VRU?6sz(T?-%mJ@OJ|BuutWKVLSL9T2NIwfj z+_i)QxQ}oN7)RKr*AouQ24D~Hv)IR%>U=Q%yZ9a0MY!5L5*KLWj}xvx?SvWHNBAkHs+pqH=>Ef%3OWXO;qLxv0) b{v-Sa+D>Gw2rhzl00000NkvXXu0mjfPwqB$ literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/navexamples.png b/public/javascripts/jqplot/docs/files/images/navexamples.png new file mode 100644 index 0000000000000000000000000000000000000000..89d1fb4e2ff9113a1eb475fa6f9b2be803c63d71 GIT binary patch literal 1308 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/navhomeover.png b/public/javascripts/jqplot/docs/files/images/navhomeover.png new file mode 100644 index 0000000000000000000000000000000000000000..63bbf7a3117740c50543c04bab97758e3fd36428 GIT binary patch literal 886 zcwPZ^1Bv{JP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RU1_1*zFO%hyvH$=8B6LMqbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;8|jZXjVGO<`k)sCPpE00P=cL_t(o!|m2zsAf|b z$MMfQ^J-&Fq)f`xP-=8!#^g_8C>I)%+$hB)C35HAI#T3{8;(5}$iHH0qSWL@b3qfM zj55lfFqm`UZzF0%&DmH6$HiXnoMk(2(|PBN;Ke2471^k!vp{c7LKEat-i;M6awuG2&UTTqx#WDyn&0;f_ z;}N`w?{QO8S8JDA5YxUQW)?r- zay*Omcnde;96W~A*p6F5Ob3dw8?w#`?8V(7rq_q*>2<{2pA&p93;YJhV`GSEMLh%ag_ca?+z?Y!%r}DurxbC!bF#-4zRe+~SQK&(Ruu1l!}<`@ z-uaU4E>KV57o3-q-ID!NOLm;eqVC5O3ft zJd=IpKkS}7?&TcwcrHvF_GP;X9L(21K$Gu}v+$Ms+CkDGrnf^(yK({Gx_RR74KaPJ zZKnbEg_u6W^ZEJY;@!qb~Y1?65`km+7aH4i)-iEIRRSYrx(TN?l&ki^v+jk4! z?rhi0qh;`0P2ro)cF?EGi+87GyQ4GD=}ler=g~X&wVJv*#@yd)61U<6>Z zz=PP=)YUt~2J|^}s5rau?=iO$kIEEo(Dv@G!auFuJCBqpT#sw=HQ>o%1CH9+IK=d$ zcFWnOU0`PL5-tld%`C$FpW-UKkKeW1-|Zo$tw$@TF=NJz8M7Gt4at$yD`MIj6#xJL M07*qoM6N<$f*-1`IsgCw literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/new.png b/public/javascripts/jqplot/docs/files/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..3eaba9c8c9348d6338104594c1ce868ec55927af GIT binary patch literal 13750 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/images/samplesm.png b/public/javascripts/jqplot/docs/files/images/samplesm.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7b3ef4d6234003ed41c26eb1597b206c706160 GIT binary patch literal 20874 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 Kt6rvR{q{eB9iTV> literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/docs/files/jqPlotCssStyling-txt.html b/public/javascripts/jqplot/docs/files/jqPlotCssStyling-txt.html new file mode 100644 index 0000000..e8c5bd2 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqPlotCssStyling-txt.html @@ -0,0 +1,39 @@ + + +jqPlot CSS Customization + + + + + + + + + +

Much of the styling of jqPlot is done by css.  The jqPlot css file is, unremarkably, jquery.jqplot.css and resides in the same directory as jqPlot itself.

There exist some styling related javascript properties on the plot objects themselves (like fontStyle, fontSize, etc.).  These can be set with the options object at plot creation.  Generally, setting these options is NOT the preferred way to customize the look of the plot.  Use the css file instead.  These options are deprecated and may disappear.  The exceptions are certain background and color options which control attributes of something renderered on a canvas.  This would be line color, grid background, etc.  These must be set by the options object.  For a list of available options, see jqPlot Options.

Objects in the plot that can be customized by css are given a css class like “.jqplot-*”.  For example, the plot title will have a “.jqplot-title” class, the axes “.jqplot-axis”, etc.

Currently assigned classes in jqPlot are as follows:

.jqplot-targetStyles for the plot target div.  These will be cascaded down to all plot elements according to css rules.
.jqplot-axisStyles for all axes
.jqplot-xaxisStyles applied to the primary x axis only.
.jqplot-yaxisStyles applied to the primary y axis only.
.jqplot-x2axis, .jqplot-x3axis, ...Styles applied to the 2nd, 3rd, etc. x axis only.
.jqplot-y2axis, .jqplot-y3axis, ...Styles applied to the 2nd, 3rd, etc.y axis only.
.jqplot-axis-tickStyles applied to all axis ticks
.jqplot-xaxis-tickStyles applied to primary x axis ticks only.
.jqplot-x2axis-tickStyles applied to secondary x axis ticks only.
.jqplot-yaxis-tickStyles applied to primary y axis ticks only.
.jqplot-y2axis-tickStyles applied to secondary y axis ticks only.
table.jqplot-table-legendStyles applied to the legend box table.
.jqplot-titleStyles applied to the title.
.jqplot-cursor-tooltipStyles applied to the cursor tooltip
.jqplot-highlighter-tooltipStyles applied to the highlighter tooltip.
div.jqplot-table-legend-swatchthe div element used for the colored swatch on the legend.

Note that axes will be assigned 2 classes like: class=”.jqplot-axis .jqplot-xaxis”.

+ +
+ + + + + + + + + + +
This document is out of date.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqPlotOptions-txt.html b/public/javascripts/jqplot/docs/files/jqPlotOptions-txt.html new file mode 100644 index 0000000..5abc833 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqPlotOptions-txt.html @@ -0,0 +1,292 @@ + + +jqPlot Options + + + + + + + + + +

This document is out of date.  While the options described here should still be relavent and valid, it has not been updated for many new options.  Sorry for this inconvenience.

This document describes the options available to jqPlot.  These are set with the third argument to the $.jqplot(‘target’, data, options) function.  Options are using the following convention:

property: default, // notes

This document is not complete!  Not all options are shown!  Also, Options marked with * in the notes are post 0.7.1 additions.  They will be available in the next release.  Further information about the options can be found in the online API documentation.  For details on how the options relate to the API documentation, see the Options Tutorial in the optionsTutorial.txt file.

options =
+{
+    seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12",
+        "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],  // colors that will
+         // be assigned to the series.  If there are more series than colors, colors
+         // will wrap around and start at the beginning again.
+
+    stackSeries: false, // if true, will create a stack plot.
+                        // Currently supported by line and bar graphs.
+
+    title: '',      // Title for the plot.  Can also be specified as an object like:
+
+    title: {
+        text: '',   // title for the plot,
+        show: true,
+    },
+
+    axesDefaults: {
+        show: false,    // wether or not to renderer the axis.  Determined automatically.
+        min: null,      // minimum numerical value of the axis.  Determined automatically.
+        max: null,      // maximum numverical value of the axis.  Determined automatically.
+        pad: 1.2,       // a factor multiplied by the data range on the axis to give the
+                        // axis range so that data points don't fall on the edges of the axis.
+        ticks: [],      // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
+                        // array of ticks to use.  Computed automatically.
+        numberTicks: undefined,
+        renderer: $.jqplot.LinearAxisRenderer,  // renderer to use to draw the axis,
+        rendererOptions: {},    // options to pass to the renderer.  LinearAxisRenderer
+                                // has no options,
+        tickOptions: {
+            mark: 'outside',    // Where to put the tick mark on the axis
+                                // 'outside', 'inside' or 'cross',
+            showMark: true,
+            showGridline: true, // wether to draw a gridline (across the whole grid) at this tick,
+            markSize: 4,        // length the tick will extend beyond the grid in pixels.  For
+                                // 'cross', length will be added above and below the grid boundary,
+            show: true,         // wether to show the tick (mark and label),
+            showLabel: true,    // wether to show the text label at the tick,
+            formatString: '',   // format string to use with the axis tick formatter
+        }
+        showTicks: true,        // wether or not to show the tick labels,
+        showTickMarks: true,    // wether or not to show the tick marks
+    },
+
+    axes: {
+        xaxis: {
+            // same options as axesDefaults
+        },
+        yaxis: {
+            // same options as axesDefaults
+        },
+        x2axis: {
+            // same options as axesDefaults
+        },
+        y2axis: {
+            // same options as axesDefaults
+        }
+    },
+
+    seriesDefaults: {
+        show: true,     // wether to render the series.
+        xaxis: 'xaxis', // either 'xaxis' or 'x2axis'.
+        yaxis: 'yaxis', // either 'yaxis' or 'y2axis'.
+        label: '',      // label to use in the legend for this line.
+        color: '',      // CSS color spec to use for the line.  Determined automatically.
+        lineWidth: 2.5, // Width of the line in pixels.
+        shadow: true,   // show shadow or not.
+        shadowAngle: 45,    // angle (degrees) of the shadow, clockwise from x axis.
+        shadowOffset: 1.25, // offset from the line of the shadow.
+        shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each
+                            // stroke offset by shadowOffset from the last.
+        shadowAlpha: 0.1,   // Opacity of the shadow.
+        showLine: true,     // whether to render the line segments or not.
+        showMarker: true,   // render the data point markers or not.
+        fill: false,        // fill under the line,
+        fillAndStroke: false,       // *stroke a line at top of fill area.
+        fillColor: undefined,       // *custom fill color for filled lines (default is line color).
+        fillAlpha: undefined,       // *custom alpha to apply to fillColor.
+        renderer: $.jqplot.LineRenderer],    // renderer used to draw the series.
+        rendererOptions: {}, // options passed to the renderer.  LineRenderer has no options.
+        markerRenderer: $.jqplot.MarkerRenderer,    // renderer to use to draw the data
+                                                    // point markers.
+        markerOptions: {
+            show: true,             // wether to show data point markers.
+            style: 'filledCircle',  // circle, diamond, square, filledCircle.
+                                    // filledDiamond or filledSquare.
+            lineWidth: 2,       // width of the stroke drawing the marker.
+            size: 9,            // size (diameter, edge length, etc.) of the marker.
+            color: '#666666'    // color of marker, set to color of line by default.
+            shadow: true,       // wether to draw shadow on marker or not.
+            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
+            shadowOffset: 1,    // offset from the line of the shadow,
+            shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each stroke
+                                // offset by shadowOffset from the last.
+            shadowAlpha: 0.07   // Opacity of the shadow
+        }
+    },
+
+    series:[
+        {Each series has same options as seriesDefaults},
+        {You can override each series individually here}
+    ],
+
+    legend: {
+        show: false,
+        location: 'ne',     // compass direction, nw, n, ne, e, se, s, sw, w.
+        xoffset: 12,        // pixel offset of the legend box from the x (or x2) axis.
+        yoffset: 12,        // pixel offset of the legend box from the y (or y2) axis.
+    },
+
+    grid: {
+        drawGridLines: true,        // wether to draw lines across the grid or not.
+        gridLineColor: '#cccccc'    // *Color of the grid lines.
+        background: '#fffdf6',      // CSS color spec for background color of grid.
+        borderColor: '#999999',     // CSS color spec for border around grid.
+        borderWidth: 2.0,           // pixel width of border around grid.
+        shadow: true,               // draw a shadow for grid.
+        shadowAngle: 45,            // angle of the shadow.  Clockwise from x axis.
+        shadowOffset: 1.5,          // offset from the line of the shadow.
+        shadowWidth: 3,             // width of the stroke for the shadow.
+        shadowDepth: 3,             // Number of strokes to make when drawing shadow.
+                                    // Each stroke offset by shadowOffset from the last.
+        shadowAlpha: 0.07           // Opacity of the shadow
+        renderer: $.jqplot.CanvasGridRenderer,  // renderer to use to draw the grid.
+        rendererOptions: {}         // options to pass to the renderer.  Note, the default
+                                    // CanvasGridRenderer takes no additional options.
+    },
+
+    // Plugin and renderer options.
+
+    // BarRenderer.
+    // With BarRenderer, you can specify additional options in the rendererOptions object
+    // on the series or on the seriesDefaults object.  Note, some options are respecified
+    // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits.
+
+    seriesDefaults: {
+        rendererOptions: {
+            barPadding: 8,      // number of pixels between adjacent bars in the same
+                                // group (same category or bin).
+            barMargin: 10,      // number of pixels between adjacent groups of bars.
+            barDirection: 'vertical', // vertical or horizontal.
+            barWidth: null,     // width of the bars.  null to calculate automatically.
+            shadowOffset: 2,    // offset from the bar edge to stroke the shadow.
+            shadowDepth: 5,     // nuber of strokes to make for the shadow.
+            shadowAlpha: 0.8,   // transparency of the shadow.
+        }
+    },
+
+    // Cursor
+    // Options are passed to the cursor plugin through the "cursor" object at the top
+    // level of the options object.
+
+    cursor: {
+        style: 'crosshair',     // A CSS spec for the cursor type to change the
+                                // cursor to when over plot.
+        show: true,
+        showTooltip: true,      // show a tooltip showing cursor position.
+        followMouse: false,     // wether tooltip should follow the mouse or be stationary.
+        tooltipLocation: 'se',  // location of the tooltip either relative to the mouse
+                                // (followMouse=true) or relative to the plot.  One of
+                                // the compass directions, n, ne, e, se, etc.
+        tooltipOffset: 6,       // pixel offset of the tooltip from the mouse or the axes.
+        showTooltipGridPosition: false,     // show the grid pixel coordinates of the mouse
+                                            // in the tooltip.
+        showTooltipUnitPosition: true,      // show the coordinates in data units of the mouse
+                                            // in the tooltip.
+        tooltipFormatString: '%.4P',    // sprintf style format string for tooltip values.
+        useAxesFormatters: true,        // wether to use the same formatter and formatStrings
+                                        // as used by the axes, or to use the formatString
+                                        // specified on the cursor with sprintf.
+        tooltipAxesGroups: [],  // show only specified axes groups in tooltip.  Would specify like:
+                                // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']].  By default, all axes
+                                // combinations with for the series in the plot are shown.
+
+    },
+
+    // Dragable
+    // Dragable options are specified with the "dragable" object at the top level
+    // of the options object.
+
+    dragable: {
+        color: undefined,       // custom color to use for the dragged point and dragged line
+                                // section. default will use a transparent variant of the line color.
+        constrainTo: 'none',    // Constrain dragging motion to an axis: 'x', 'y', or 'none'.
+    },
+
+    // Highlighter
+    // Highlighter options are specified with the "highlighter" object at the top level
+    // of the options object.
+
+    highlighter: {
+        lineWidthAdjust: 2.5,   // pixels to add to the size line stroking the data point marker
+                                // when showing highlight.  Only affects non filled data point markers.
+        sizeAdjust: 5,          // pixels to add to the size of filled markers when drawing highlight.
+        showTooltip: true,      // show a tooltip with data point values.
+        tooltipLocation: 'nw',  // location of tooltip: n, ne, e, se, s, sw, w, nw.
+        fadeTooltip: true,      // use fade effect to show/hide tooltip.
+        tooltipFadeSpeed: "fast"// slow, def, fast, or a number of milliseconds.
+        tooltipOffset: 2,       // pixel offset of tooltip from the highlight.
+        tooltipAxes: 'both',    // which axis values to display in the tooltip, x, y or both.
+        tooltipSeparator: ', '  // separator between values in the tooltip.
+        useAxesFormatters: true // use the same format string and formatters as used in the axes to
+                                // display values in the tooltip.
+        tooltipFormatString: '%.5P' // sprintf format string for the tooltip.  only used if
+                                    // useAxesFormatters is false.  Will use sprintf formatter with
+                                    // this string, not the axes formatters.
+    },
+
+    // LogAxisRenderer
+    // LogAxisRenderer add 2 options to the axes object.  These options are specified directly on
+    // the axes or axesDefaults object.
+
+    axesDefaults: {
+        base: 10,                   // the logarithmic base.
+        tickDistribution: 'even',   // 'even' or 'power'.  'even' will produce with even visiual (pixel)
+                                    // spacing on the axis.  'power' will produce ticks spaced by
+                                    // increasing powers of the log base.
+    },
+
+    // PieRenderer
+    // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object.
+
+    seriesDefaults: {
+        rendererOptions: {
+            diameter: undefined, // diameter of pie, auto computed by default.
+            padding: 20,        // padding between pie and neighboring legend or plot margin.
+            sliceMargin: 0,     // gap between slices.
+            fill: true,         // render solid (filled) slices.
+            shadowOffset: 2,    // offset of the shadow from the chart.
+            shadowDepth: 5,     // Number of strokes to make when drawing shadow.  Each stroke
+                                // offset by shadowOffset from the last.
+            shadowAlpha: 0.07   // Opacity of the shadow
+        }
+    },
+
+    // Trendline
+    // Trendline takes options on the trendline object of the series or seriesDefaults object.
+
+    seriesDefaults: {
+        trendline: {
+            show: true,         // show the trend line
+            color: '#666666',   // CSS color spec for the trend line.
+            label: '',          // label for the trend line.
+            type: 'linear',     // 'linear', 'exponential' or 'exp'
+            shadow: true,       // show the trend line shadow.
+            lineWidth: 1.5,     // width of the trend line.
+            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
+            shadowOffset: 1.5,  // offset from the line of the shadow.
+            shadowDepth: 3,     // Number of strokes to make when drawing shadow.
+                                // Each stroke offset by shadowOffset from the last.
+            shadowAlpha: 0.07   // Opacity of the shadow
+        }
+    }
+}
+ +
+ + + + + + + + + + +
This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-axisLabelRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-axisLabelRenderer-js.html new file mode 100644 index 0000000..a268b1a --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-axisLabelRenderer-js.html @@ -0,0 +1,47 @@ + + +$.jqplot.AxisLabelRenderer + + + + + + + + + +

Renderer to place labels on the axes.

Summary
$.jqplot.AxisLabelRendererRenderer to place labels on the axes.
Properties
showwether or not to show the tick (mark and label).
labelThe text or html for the label.
escapeHTMLtrue to escape HTML entities in the label.
+ +

Properties

+ +

show

this.show = true

wether or not to show the tick (mark and label).

+ +

label

this.label = ''

The text or html for the label.

+ +

escapeHTML

this.escapeHTML = false

true to escape HTML entities in the label.

+ +
+ + + + + + + + + + +
this.show = true
wether or not to show the tick (mark and label).
this.label = ''
The text or html for the label.
this.escapeHTML = false
true to escape HTML entities in the label.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-axisTickRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-axisTickRenderer-js.html new file mode 100644 index 0000000..13ea189 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-axisTickRenderer-js.html @@ -0,0 +1,73 @@ + + +$.jqplot.AxisTickRenderer + + + + + + + + + +

A “tick” object showing the value of a tick/gridline on the plot.

Summary
$.jqplot.AxisTickRendererA “tick” object showing the value of a tick/gridline on the plot.
Properties
marktick mark on the axis.
showMarkwether or not to show the mark on the axis.
showGridlinewether or not to draw the gridline on the grid at this tick.
isMinorTickif this is a minor tick.
sizeLength of the tick beyond the grid in pixels.
markSizeLength of the tick marks in pixels.
showwether or not to show the tick (mark and label).
showLabelwether or not to show the label.
formatterA class of a formatter for the tick text.
prefixString to prepend to the tick label.
suffixString to append to the tick label.
formatStringstring passed to the formatter.
fontFamilycss spec for the font-family css attribute.
fontSizecss spec for the font-size css attribute.
textColorcss spec for the color attribute.
escapeHTMLtrue to escape HTML entities in the label.
+ +

Properties

+ +

mark

this.mark = 'outside'

tick mark on the axis.  One of ‘inside’, ‘outside’, ‘cross’, ‘’ or null.

+ +

showMark

this.showMark = true

wether or not to show the mark on the axis.

+ +

showGridline

this.showGridline = true

wether or not to draw the gridline on the grid at this tick.

+ +

isMinorTick

this.isMinorTick = false

if this is a minor tick.

+ +

size

this.size = 4

Length of the tick beyond the grid in pixels.  DEPRECATED: This has been superceeded by markSize

+ +

markSize

this.markSize = 6

Length of the tick marks in pixels.  For ‘cross’ style, length will be stoked above and below axis, so total length will be twice this.

+ +

show

this.show = true

wether or not to show the tick (mark and label).  Setting this to false requires more testing.  It is recommended to set showLabel and showMark to false instead.

+ +

showLabel

this.showLabel = true

wether or not to show the label.

+ +

formatter

this.formatter = $.jqplot.DefaultTickFormatter

A class of a formatter for the tick text.  sprintf by default.

+ +

prefix

this.prefix = ''

String to prepend to the tick label.  Prefix is prepended to the formatted tick label.

+ +

suffix

this.suffix = ''

String to append to the tick label.  Suffix is appended to the formatted tick label.

+ +

formatString

this.formatString = ''

string passed to the formatter.

+ +

fontFamily

this.fontFamily

css spec for the font-family css attribute.

+ +

fontSize

this.fontSize

css spec for the font-size css attribute.

+ +

textColor

this.textColor

css spec for the color attribute.

+ +

escapeHTML

this.escapeHTML = false

true to escape HTML entities in the label.

+ +
+ + + + + + + + + + +
this.mark = 'outside'
tick mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.isMinorTick = false
if this is a minor tick.
this.size = 4
Length of the tick beyond the grid in pixels.
this.markSize = 6
Length of the tick marks in pixels.
this.show = true
wether or not to show the tick (mark and label).
this.showLabel = true
wether or not to show the label.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.prefix = ''
String to prepend to the tick label.
this.suffix = ''
String to append to the tick label.
this.formatString = ''
string passed to the formatter.
this.fontFamily
css spec for the font-family css attribute.
this.fontSize
css spec for the font-size css attribute.
this.textColor
css spec for the color attribute.
this.escapeHTML = false
true to escape HTML entities in the label.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-canvasGridRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-canvasGridRenderer-js.html new file mode 100644 index 0000000..f069f6b --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-canvasGridRenderer-js.html @@ -0,0 +1,39 @@ + + +$.jqplot.CanvasGridRenderer + + + + + + + + + +

The default jqPlot grid renderer, creating a grid on a canvas element.  The renderer has no additional options beyond the Grid class.

+ +
+ + + + + + + + + + +
Object representing the grid on which the plot is drawn.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-core-js.html b/public/javascripts/jqplot/docs/files/jqplot-core-js.html new file mode 100644 index 0000000..9fa9cf9 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-core-js.html @@ -0,0 +1,389 @@ + + +jqPlot Charts + + + + + + + + + +

Pure JavaScript plotting plugin for jQuery.

Summary
jqPlot ChartsPure JavaScript plotting plugin for jQuery.
Versionversion: 1.0.4 revision: 1121
Copyright & LicenseCopyright © 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.
IntroductionjqPlot requires jQuery (1.4+ required for certain features).
UsageSee jqPlot Usage
Available OptionsSee jqPlot Options for a list of options available thorugh the options object (not complete yet!)
Options UsageSee Options Tutorial
ChangesSee Change Log
$.jqplotjQuery function called by the user to create a plot.
Hooks
jqPlot Pugin Hooks
AxisAn individual axis object.
PropertiesAxes options are specified within an axes object at the top level of the plot options like so:
showWether to display the axis on the graph.
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
tickOptionsOptions that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
labelRendererA class of a rendering engine for creating an axis label.
labelOptionsOptions passed to the label renderer.
labelLabel for the axis
showLabeltrue to show the axis label.
minminimum value of the axis (in data units, not pixels).
maxmaximum value of the axis (in data units, not pixels).
autoscaleDEPRECATED the default scaling algorithm produces superior results.
padPadding to extend the range above and below the data bounds.
padMaxPadding to extend the range above data bounds.
padMinPadding to extend the range below data bounds.
ticks1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
numberTicksDesired number of ticks.
tickIntervalnumber of units between ticks.
rendererA class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
rendererOptionsrenderer specific options.
showTicksWether to show the ticks (both marks and labels) or not.
showTickMarksWether to show the tick marks (line crossing grid) or not.
showMinorTicksWether or not to show minor ticks.
drawMajorGridlinesTrue to draw gridlines for major axis ticks.
drawMinorGridlinesTrue to draw gridlines for minor ticks.
drawMajorTickMarksTrue to draw tick marks for major axis ticks.
drawMinorTickMarksTrue to draw tick marks for minor ticks.
useSeriesColorUse the color of the first series associated with this axis for the tick marks and line bordering this axis.
borderWidthwidth of line stroked at the border of the axis.
borderColorcolor of the border adjacent to the axis.
scaleToHiddenSeriesTrue to include hidden series when computing axes bounds and scaling.
syncTickstrue to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
tickSpacingApproximate pixel spacing between ticks on graph.
LegendLegend object.
Properties
showWether to display the legend on the graph.
locationPlacement of the legend.
labelsArray of labels to use.
showLabelstrue to show the label text on the legend.
showSwatchtrue to show the color swatches on the legend.
placement“insideGrid” places legend inside the grid area of the plot.
xoffsetDEPRECATED.
yoffsetDEPRECATED.
bordercss spec for the border around the legend box.
backgroundcss spec for the background of the legend box.
textColorcss color spec for the legend text.
fontFamilycss font-family spec for the legend text.
fontSizecss font-size spec for the legend text.
rowSpacingcss padding-top spec for the rows in the legend.
rendererOptionsrenderer specific options passed to the renderer.
predrawWether to draw the legend before the series or not.
marginTopCSS margin for the legend DOM element.
marginRightCSS margin for the legend DOM element.
marginBottomCSS margin for the legend DOM element.
marginLeftCSS margin for the legend DOM element.
escapeHtmlTrue to escape special characters with their html entity equivalents in legend text.
TitlePlot Title object.
Properties
texttext of the title;
showwether or not to show the title
fontFamilycss font-family spec for the text.
fontSizecss font-size spec for the text.
textAligncss text-align spec for the text.
textColorcss color spec for the text.
rendererA class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
rendererOptionsrenderer specific options passed to the renderer.
escapeHtmlTrue to escape special characters with their html entity equivalents in title text.
SeriesAn individual data series object.
PropertiesProperties will be assigned from a series array at the top level of the options.
showwether or not to draw the series.
xaxiswhich x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
yaxiswhich y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
rendererA class of a renderer which will draw the series, see $.jqplot.LineRenderer.
rendererOptionsOptions to pass on to the renderer.
labelLine label to use in the legend.
showLabeltrue to show label for this series in the legend.
colorcss color spec for the series
negativeColorcss color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
lineWidthwidth of the line in pixels.
lineJoinCanvas lineJoin style between segments of series.
lineCapCanvas lineCap style at ends of line.
linePatternline pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
breakOnNullWether line segments should be be broken at null value.
markerRendererA class of a renderer which will draw marker (e.g.
markerOptionsrenderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
showLinewether to actually draw the line or not.
showMarkerwether or not to show the markers at the data points.
index0 based index of this series in the plot series array.
filltrue or false, wether to fill under lines or in bars.
fillColorCSS color spec to use for fill under line.
fillAlphaAlpha transparency to apply to the fill under the line.
fillAndStrokeIf true will stroke the line (with color this.color) as well as fill under it.
disableStacktrue to not stack this series with other series in the plot.
neighborThresholdhow close or far (in pixels) the cursor must be from a point marker to detect the point.
fillToZerotrue will force bar and filled series to fill toward zero on the fill Axis.
fillToValuefill a filled series to this value on the fill axis.
fillAxisEither ‘x’ or ‘y’.
useNegativeColorstrue to color negative values differently in filled and bar charts.
GridObject representing the grid on which the plot is drawn.
Properties
drawGridlineswether to draw the gridlines on the plot.
gridLineColorcolor of the grid lines.
gridLineWidthwidth of the grid lines.
backgroundcss spec for the background color.
borderColorcss spec for the color of the grid border.
borderWidthwidth of the border in pixels.
drawBorderTrue to draw border around grid.
shadowwether to show a shadow behind the grid.
shadowAngleshadow angle in degrees
shadowOffsetOffset of each shadow stroke from the border in pixels
shadowWidthwidth of the stoke for the shadow
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowColoran optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
shadowAlphaAlpha channel transparency of shadow.
rendererInstance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
rendererOptionsOptions to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
jqPlotPlot object returned by call to $.jqplot.
PropertiesThese properties are specified at the top of the options object like so:
animateTrue to animate the series on initial plot draw (renderer dependent).
animateReplotTrue to animate series after a call to the replot() method.
axesup to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
datauser’s data.
dataRendererA callable which can be used to preprocess data passed into the plot.
dataRendererOptionsOptions that will be passed to the dataRenderer.
axesDefaultsdefault options that will be applied to all axes.
seriesDefaultsdefault options that will be applied to all series.
defaultAxisStart1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
fillBetweenFill between 2 line series in a plot.
fontSizecss spec for the font-size attribute.
gridSee Grid for grid specific options.
legendsee <$.jqplot.TableLegendRenderer>
noDataIndicatorOptions to set up a mock plot with a data loading indicator if no data is specified.
seriesArray of series object options.
seriesColorsAnn array of CSS color specifications that will be applied, in order, to the series in the plot.
sortDatafalse to not sort the data passed in by the user.
stackSeriestrue or false, creates a stack or “mountain” plot.
titleTitle object.
methods
initsets the plot target, checks data and applies user options to plot.
resetAxesScaleReset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
reInitializereinitialize plot for replotting.
quickInitQuick reinitialization plot for replotting.
destroyReleases all resources occupied by the plot
replotDoes a reinitialization of the plot followed by a redraw.
redrawEmpties the plot target div and redraws the plot.
drawDraws all elements of the plot into the container.
drawSeriesRedraws all or just one series on the plot.
moveSeriesToFrontThis method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
moveSeriesToBackThis method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
restorePreviousSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its previous state.
restoreOriginalSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
+ +

Version

version: 1.0.4 revision: 1121

+ +

Copyright & License

Copyright © 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.  This means that you can choose the license that best suits your project and use it accordingly.

See GPL Version 2 and MIT License contained within this distribution for further information.

The author would appreciate an email letting him know of any substantial use of jqPlot.  You can reach the author at: chris at jqplot dot com or see http://www.jqplot.com/info.php.  This is, of course, not required.

If you are feeling kind and generous, consider supporting the project by making a donation at: http://www.jqplot.com/donate.php.

sprintf functions contained in jqplot.sprintf.js by Ash Searle

version 2007.04.27 author Ash Searle http://hexmen.com/blog/2007/03/printf-sprintf/ http://hexmen.com/js/sprintf.js The author (Ash Searle) has placed this code in the public domain: “This code is unrestricted: you are free to use it however you like.”

+ +

Introduction

jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution.  To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally the excanvas script for IE support in your web page:

<!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+<script language="javascript" type="text/javascript" src="jquery-1.4.4.min.js"></script>
+<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+<link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />

jqPlot can be customized by overriding the defaults of any of the objects which make up the plot.  The general usage of jqplot is:

chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject});

The options available to jqplot are detailed in jqPlot Options in the jqPlotOptions.txt file.

An actual call to $.jqplot() may look like the examples below:

chart = $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);

or

dataArray = [34,12,43,55,77];
+chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}});

For more inforrmation, see jqPlot Usage.

+ +

Usage

+ +

Available Options

See jqPlot Options for a list of options available thorugh the options object (not complete yet!)

+ +

Options Usage

+ +

Changes

+ +

$.jqplot

jQuery function called by the user to create a plot.

Parameters

targetID of target element to render the plot into.
dataan array of data series.
optionsuser defined options object.  See the individual classes for available options.

Properties

configobject to hold configuration information for jqPlot plot object.

attributes

enablePluginsFalse to disable plugins by default.  Plugins must then be explicitly enabled in the individual plot options.  Default: false.  This property sets the “show” property of certain plugins to true or false.  Only plugins that can be immediately active upon loading are affected.  This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.
defaultHeightDefault height for plots where no css height specification exists.  This is a jqplot wide default.
defaultWidthDefault height for plots where no css height specification exists.  This is a jqplot wide default.
+ +

Hooks

+ +

jqPlot Pugin Hooks

$.jqplot.preInitHookscalled before initialization.
$.jqplot.postInitHookscalled after initialization.
$.jqplot.preParseOptionsHookscalled before user options are parsed.
$.jqplot.postParseOptionsHookscalled after user options are parsed.
$.jqplot.preDrawHookscalled before plot draw.
$.jqplot.postDrawHookscalled after plot draw.
$.jqplot.preDrawSeriesHookscalled before each series is drawn.
$.jqplot.postDrawSeriesHookscalled after each series is drawn.
$.jqplot.preDrawLegendHookscalled before the legend is drawn.
$.jqplot.addLegendRowHookscalled at the end of legend draw, so plugins can add rows to the legend table.
$.jqplot.preSeriesInitHookscalled before series is initialized.
$.jqplot.postSeriesInitHookscalled after series is initialized.
$.jqplot.preParseSeriesOptionsHookscalled before series related options are parsed.
$.jqplot.postParseSeriesOptionsHookscalled after series related options are parsed.
$.jqplot.eventListenerHookscalled at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.
$.jqplot.preDrawSeriesShadowHookscalled before series shadows are drawn.
$.jqplot.postDrawSeriesShadowHookscalled after series shadows are drawn.
+ +

Axis

An individual axis object.  Cannot be instantiated directly, but created by the Plot oject.  Axis properties can be set or overriden by the options passed in from the user.

Summary
PropertiesAxes options are specified within an axes object at the top level of the plot options like so:
showWether to display the axis on the graph.
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
tickOptionsOptions that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
labelRendererA class of a rendering engine for creating an axis label.
labelOptionsOptions passed to the label renderer.
labelLabel for the axis
showLabeltrue to show the axis label.
minminimum value of the axis (in data units, not pixels).
maxmaximum value of the axis (in data units, not pixels).
autoscaleDEPRECATED the default scaling algorithm produces superior results.
padPadding to extend the range above and below the data bounds.
padMaxPadding to extend the range above data bounds.
padMinPadding to extend the range below data bounds.
ticks1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
numberTicksDesired number of ticks.
tickIntervalnumber of units between ticks.
rendererA class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
rendererOptionsrenderer specific options.
showTicksWether to show the ticks (both marks and labels) or not.
showTickMarksWether to show the tick marks (line crossing grid) or not.
showMinorTicksWether or not to show minor ticks.
drawMajorGridlinesTrue to draw gridlines for major axis ticks.
drawMinorGridlinesTrue to draw gridlines for minor ticks.
drawMajorTickMarksTrue to draw tick marks for major axis ticks.
drawMinorTickMarksTrue to draw tick marks for minor ticks.
useSeriesColorUse the color of the first series associated with this axis for the tick marks and line bordering this axis.
borderWidthwidth of line stroked at the border of the axis.
borderColorcolor of the border adjacent to the axis.
scaleToHiddenSeriesTrue to include hidden series when computing axes bounds and scaling.
syncTickstrue to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
tickSpacingApproximate pixel spacing between ticks on graph.
+ +

Properties

Axes options are specified within an axes object at the top level of the plot options like so:

{
+   axes: {
+       xaxis: {min: 5},
+       yaxis: {min: 2, max: 8, numberTicks:4},
+       x2axis: {pad: 1.5},
+       y2axis: {ticks:[22, 44, 66, 88]}
+       }
+}

There are 2 x axes, ‘xaxis’ and ‘x2axis’, and 9 yaxes, ‘yaxis’, ‘y2axis’.  ‘y3axis’, ...  Any or all of which may be specified.

+ +

show

this.show = false

Wether to display the axis on the graph.

+ +

tickRenderer

this.tickRenderer = $.jqplot.AxisTickRenderer

A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.

+ +

tickOptions

this.tickOptions = {}

Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.

+ +

labelRenderer

this.labelRenderer = $.jqplot.AxisLabelRenderer

A class of a rendering engine for creating an axis label.

+ +

labelOptions

this.labelOptions = {}

Options passed to the label renderer.

+ +

label

this.label = null

Label for the axis

+ +

showLabel

this.showLabel = true

true to show the axis label.

+ +

min

this.min = null

minimum value of the axis (in data units, not pixels).

+ +

max

this.max = null

maximum value of the axis (in data units, not pixels).

+ +

autoscale

this.autoscale = false

DEPRECATED the default scaling algorithm produces superior results.

+ +

pad

this.pad = 1.2

Padding to extend the range above and below the data bounds.  The data range is multiplied by this factor to determine minimum and maximum axis bounds.  A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0.

+ +

padMax

this.padMax = null

Padding to extend the range above data bounds.  The top of the data range is multiplied by this factor to determine maximum axis bounds.  A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0.

+ +

padMin

this.padMin = null

Padding to extend the range below data bounds.  The bottom of the data range is multiplied by this factor to determine minimum axis bounds.  A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0.

+ +

ticks

this.ticks = []

1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.  If no label is specified, the value is formatted into an appropriate label.

+ +

numberTicks

this.numberTicks

Desired number of ticks.  Default is to compute automatically.

+ +

tickInterval

this.tickInterval

number of units between ticks.  Mutually exclusive with numberTicks.

+ +

renderer

this.renderer = $.jqplot.LinearAxisRenderer

A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.

+ +

rendererOptions

this.rendererOptions = {}

renderer specific options.  See $.jqplot.LinearAxisRenderer for options.

+ +

showTicks

this.showTicks = true

Wether to show the ticks (both marks and labels) or not.  Will not override showMark and showLabel options if specified on the ticks themselves.

+ +

showTickMarks

this.showTickMarks = true

Wether to show the tick marks (line crossing grid) or not.  Overridden by showTicks and showMark option of tick itself.

+ +

showMinorTicks

this.showMinorTicks = true

Wether or not to show minor ticks.  This is renderer dependent.

+ +

drawMajorGridlines

this.drawMajorGridlines = true

True to draw gridlines for major axis ticks.

+ +

drawMinorGridlines

this.drawMinorGridlines = false

True to draw gridlines for minor ticks.

+ +

drawMajorTickMarks

this.drawMajorTickMarks = true

True to draw tick marks for major axis ticks.

+ +

drawMinorTickMarks

this.drawMinorTickMarks = true

True to draw tick marks for minor ticks.  This is renderer dependent.

+ +

useSeriesColor

this.useSeriesColor = false

Use the color of the first series associated with this axis for the tick marks and line bordering this axis.

+ +

borderWidth

this.borderWidth = null

width of line stroked at the border of the axis.  Defaults to the width of the grid boarder.

+ +

borderColor

this.borderColor = null

color of the border adjacent to the axis.  Defaults to grid border color.

+ +

scaleToHiddenSeries

this.scaleToHiddenSeries = false

True to include hidden series when computing axes bounds and scaling.

+ +

syncTicks

this.syncTicks = null

true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.  This has an impact on autoscaling algorithm, however.  In general, autoscaling an individual axis will work better if it does not have to sync ticks.

+ +

tickSpacing

this.tickSpacing = 75

Approximate pixel spacing between ticks on graph.  Used during autoscaling.  This number will be an upper bound, actual spacing will be less.

+ +

Legend

Legend object.  Cannot be instantiated directly, but created by the Plot oject.  Legend properties can be set or overriden by the options passed in from the user.

Summary
Properties
showWether to display the legend on the graph.
locationPlacement of the legend.
labelsArray of labels to use.
showLabelstrue to show the label text on the legend.
showSwatchtrue to show the color swatches on the legend.
placement“insideGrid” places legend inside the grid area of the plot.
xoffsetDEPRECATED.
yoffsetDEPRECATED.
bordercss spec for the border around the legend box.
backgroundcss spec for the background of the legend box.
textColorcss color spec for the legend text.
fontFamilycss font-family spec for the legend text.
fontSizecss font-size spec for the legend text.
rowSpacingcss padding-top spec for the rows in the legend.
rendererOptionsrenderer specific options passed to the renderer.
predrawWether to draw the legend before the series or not.
marginTopCSS margin for the legend DOM element.
marginRightCSS margin for the legend DOM element.
marginBottomCSS margin for the legend DOM element.
marginLeftCSS margin for the legend DOM element.
escapeHtmlTrue to escape special characters with their html entity equivalents in legend text.
+ +

Properties

+ +

show

this.show = false

Wether to display the legend on the graph.

+ +

location

this.location = 'ne'

Placement of the legend.  one of the compass directions: nw, n, ne, e, se, s, sw, w

+ +

labels

this.labels = []

Array of labels to use.  By default the renderer will look for labels on the series.  Labels specified in this array will override labels specified on the series.

+ +

showLabels

this.showLabels = true

true to show the label text on the legend.

+ +

showSwatch

this.showSwatches = true

true to show the color swatches on the legend.

+ +

placement

this.placement = "insideGrid"

”insideGrid” places legend inside the grid area of the plot.  “outsideGrid” places the legend outside the grid but inside the plot container, shrinking the grid to accomodate the legend.  “inside” synonym for “insideGrid”, “outside” places the legend ouside the grid area, but does not shrink the grid which can cause the legend to overflow the plot container.

+ +

xoffset

this.xoffset = 0

DEPRECATED.  Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.

+ +

yoffset

this.yoffset = 0

DEPRECATED.  Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.

+ +

border

this.border

css spec for the border around the legend box.

+ +

background

this.background

css spec for the background of the legend box.

+ +

textColor

this.textColor

css color spec for the legend text.

+ +

fontFamily

this.fontFamily

css font-family spec for the legend text.

+ +

fontSize

this.fontSize

css font-size spec for the legend text.

+ +

rowSpacing

this.rowSpacing = '0.5em'

css padding-top spec for the rows in the legend.

+ +

rendererOptions

this.rendererOptions = {}

renderer specific options passed to the renderer.

+ +

predraw

Wether to draw the legend before the series or not.  Used with series specific legend renderers for pie, donut, mekko charts, etc.

+ +

marginTop

this.marginTop = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

+ +

marginRight

this.marginRight = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

+ +

marginBottom

this.marginBottom = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

+ +

marginLeft

this.marginLeft = null

CSS margin for the legend DOM element.  This will set an element CSS style for the margin which will override any style sheet setting.  The default will be taken from the stylesheet.

+ +

escapeHtml

this.escapeHtml = false

True to escape special characters with their html entity equivalents in legend text.  “<” becomes &lt; and so on, so html tags are not rendered.

+ +

Title

Plot Title object.  Cannot be instantiated directly, but created by the Plot oject.  Title properties can be set or overriden by the options passed in from the user.

Parameters

texttext of the title.
Summary
Properties
texttext of the title;
showwether or not to show the title
fontFamilycss font-family spec for the text.
fontSizecss font-size spec for the text.
textAligncss text-align spec for the text.
textColorcss color spec for the text.
rendererA class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
rendererOptionsrenderer specific options passed to the renderer.
escapeHtmlTrue to escape special characters with their html entity equivalents in title text.
+ +

Properties

+ +

text

this.text = text

text of the title;

+ +

show

this.show = true

wether or not to show the title

+ +

fontFamily

this.fontFamily

css font-family spec for the text.

+ +

fontSize

this.fontSize

css font-size spec for the text.

+ +

textAlign

this.textAlign

css text-align spec for the text.

+ +

textColor

this.textColor

css color spec for the text.

+ +

renderer

this.renderer = $.jqplot.DivTitleRenderer

A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.

+ +

rendererOptions

this.rendererOptions = {}

renderer specific options passed to the renderer.

+ +

escapeHtml

this.escapeHtml = false

True to escape special characters with their html entity equivalents in title text.  “<” becomes &lt; and so on, so html tags are not rendered.

+ +

Series

An individual data series object.  Cannot be instantiated directly, but created by the Plot oject.  Series properties can be set or overriden by the options passed in from the user.

Summary
PropertiesProperties will be assigned from a series array at the top level of the options.
showwether or not to draw the series.
xaxiswhich x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
yaxiswhich y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
rendererA class of a renderer which will draw the series, see $.jqplot.LineRenderer.
rendererOptionsOptions to pass on to the renderer.
labelLine label to use in the legend.
showLabeltrue to show label for this series in the legend.
colorcss color spec for the series
negativeColorcss color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
lineWidthwidth of the line in pixels.
lineJoinCanvas lineJoin style between segments of series.
lineCapCanvas lineCap style at ends of line.
linePatternline pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
breakOnNullWether line segments should be be broken at null value.
markerRendererA class of a renderer which will draw marker (e.g.
markerOptionsrenderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
showLinewether to actually draw the line or not.
showMarkerwether or not to show the markers at the data points.
index0 based index of this series in the plot series array.
filltrue or false, wether to fill under lines or in bars.
fillColorCSS color spec to use for fill under line.
fillAlphaAlpha transparency to apply to the fill under the line.
fillAndStrokeIf true will stroke the line (with color this.color) as well as fill under it.
disableStacktrue to not stack this series with other series in the plot.
neighborThresholdhow close or far (in pixels) the cursor must be from a point marker to detect the point.
fillToZerotrue will force bar and filled series to fill toward zero on the fill Axis.
fillToValuefill a filled series to this value on the fill axis.
fillAxisEither ‘x’ or ‘y’.
useNegativeColorstrue to color negative values differently in filled and bar charts.
+ +

Properties

Properties will be assigned from a series array at the top level of the options.  If you had two series and wanted to change the color and line width of the first and set the second to use the secondary y axis with no shadow and supply custom labels for each:

{
+   series:[
+       {color: '#ff4466', lineWidth: 5, label:'good line'},
+       {yaxis: 'y2axis', shadow: false, label:'bad line'}
+   ]
+}
+ +

show

this.show = true

wether or not to draw the series.

+ +

xaxis

this.xaxis = 'xaxis'

which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.

+ +

yaxis

this.yaxis = 'yaxis'

which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.

+ +

renderer

this.renderer = $.jqplot.LineRenderer

A class of a renderer which will draw the series, see $.jqplot.LineRenderer.

+ +

rendererOptions

this.rendererOptions = {}

Options to pass on to the renderer.

+ +

label

this.label = ''

Line label to use in the legend.

+ +

showLabel

this.showLabel = true

true to show label for this series in the legend.

+ +

color

this.color

css color spec for the series

+ +

negativeColor

this.negativeColor

css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.

+ +

lineWidth

this.lineWidth = 2.5

width of the line in pixels.  May have different meanings depending on renderer.

+ +

lineJoin

this.lineJoin = 'round'

Canvas lineJoin style between segments of series.

+ +

lineCap

this.lineCap = 'round'

Canvas lineCap style at ends of line.

+ +

linePattern

this.linePattern = 'solid'

line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’ characters such as ‘.-.’ or a numerical array like [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, [1, 10, 20, 10] to draw a dot-dash line, and so on.

+ +

shadowAngle

this.shadowAngle = 45

Shadow angle in degrees

+ +

shadowOffset

this.shadowOffset = 1.25

Shadow offset from line in pixels

+ +

shadowDepth

this.shadowDepth = 3

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

+ +

shadowAlpha

this.shadowAlpha = '0.1'

Alpha channel transparency of shadow.  0 = transparent.

+ +

breakOnNull

this.breakOnNull = false

Wether line segments should be be broken at null value.  False will join point on either side of line.

+ +

markerRenderer

this.markerRenderer = $.jqplot.MarkerRenderer

A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points, see $.jqplot.MarkerRenderer.

+ +

markerOptions

this.markerOptions = {}

renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.

+ +

showLine

this.showLine = true

wether to actually draw the line or not.  Series will still be renderered, even if no line is drawn.

+ +

showMarker

this.showMarker = true

wether or not to show the markers at the data points.

+ +

index

this.index

0 based index of this series in the plot series array.

+ +

fill

this.fill = false

true or false, wether to fill under lines or in bars.  May not be implemented in all renderers.

+ +

fillColor

this.fillColor

CSS color spec to use for fill under line.  Defaults to line color.

+ +

fillAlpha

this.fillAlpha

Alpha transparency to apply to the fill under the line.  Use this to adjust alpha separate from fill color.

+ +

fillAndStroke

this.fillAndStroke = false

If true will stroke the line (with color this.color) as well as fill under it.  Applies only when fill is true.

+ +

disableStack

this.disableStack = false

true to not stack this series with other series in the plot.  To render properly, non-stacked series must come after any stacked series in the plot’s data series array.  So, the plot’s data series array would look like:

[stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...]

disableStack will put a gap in the stacking order of series, and subsequent stacked series will not fill down through the non-stacked series and will most likely not stack properly on top of the non-stacked series.

+ +

neighborThreshold

this.neighborThreshold = 4

how close or far (in pixels) the cursor must be from a point marker to detect the point.

+ +

fillToZero

this.fillToZero = false

true will force bar and filled series to fill toward zero on the fill Axis.

+ +

fillToValue

this.fillToValue = 0

fill a filled series to this value on the fill axis.  Works in conjunction with fillToZero, so that must be true.

+ +

fillAxis

this.fillAxis = 'y'

Either ‘x’ or ‘y’.  Which axis to fill the line toward if fillToZero is true.  ‘y’ means fill up/down to 0 on the y axis for this series.

+ +

useNegativeColors

this.useNegativeColors = true

true to color negative values differently in filled and bar charts.

+ +

Grid

Object representing the grid on which the plot is drawn.  The grid in this context is the area bounded by the axes, the area which will contain the series.  Note, the series are drawn on their own canvas.  The Grid object cannot be instantiated directly, but is created by the Plot oject.  Grid properties can be set or overriden by the options passed in from the user.

Summary
Properties
drawGridlineswether to draw the gridlines on the plot.
gridLineColorcolor of the grid lines.
gridLineWidthwidth of the grid lines.
backgroundcss spec for the background color.
borderColorcss spec for the color of the grid border.
borderWidthwidth of the border in pixels.
drawBorderTrue to draw border around grid.
shadowwether to show a shadow behind the grid.
shadowAngleshadow angle in degrees
shadowOffsetOffset of each shadow stroke from the border in pixels
shadowWidthwidth of the stoke for the shadow
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowColoran optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
shadowAlphaAlpha channel transparency of shadow.
rendererInstance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
rendererOptionsOptions to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
+ +

Properties

+ +

drawGridlines

this.drawGridlines = true

wether to draw the gridlines on the plot.

+ +

gridLineColor

this.gridLineColor = '#cccccc'

color of the grid lines.

+ +

gridLineWidth

this.gridLineWidth = 1.0

width of the grid lines.

+ +

background

this.background = '#fffdf6'

css spec for the background color.

+ +

borderColor

this.borderColor = '#999999'

css spec for the color of the grid border.

+ +

borderWidth

this.borderWidth = 2.0

width of the border in pixels.

+ +

drawBorder

this.drawBorder = true

True to draw border around grid.

+ +

shadow

this.shadow = true

wether to show a shadow behind the grid.

+ +

shadowAngle

this.shadowAngle = 45

shadow angle in degrees

+ +

shadowOffset

this.shadowOffset = 1.5

Offset of each shadow stroke from the border in pixels

+ +

shadowWidth

this.shadowWidth = 3

width of the stoke for the shadow

+ +

shadowDepth

this.shadowDepth = 3

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

+ +

shadowColor

this.shadowColor = null

an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form

+ +

shadowAlpha

this.shadowAlpha = '0.07'

Alpha channel transparency of shadow.  0 = transparent.

+ +

renderer

this.renderer = $.jqplot.CanvasGridRenderer

Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.

+ +

rendererOptions

this.rendererOptions = {}

Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.

+ +

jqPlot

Plot object returned by call to $.jqplot.  Handles parsing user options, creating sub objects (Axes, legend, title, series) and rendering the plot.

Summary
PropertiesThese properties are specified at the top of the options object like so:
animateTrue to animate the series on initial plot draw (renderer dependent).
animateReplotTrue to animate series after a call to the replot() method.
axesup to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
datauser’s data.
dataRendererA callable which can be used to preprocess data passed into the plot.
dataRendererOptionsOptions that will be passed to the dataRenderer.
axesDefaultsdefault options that will be applied to all axes.
seriesDefaultsdefault options that will be applied to all series.
defaultAxisStart1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
fillBetweenFill between 2 line series in a plot.
fontSizecss spec for the font-size attribute.
gridSee Grid for grid specific options.
legendsee <$.jqplot.TableLegendRenderer>
noDataIndicatorOptions to set up a mock plot with a data loading indicator if no data is specified.
seriesArray of series object options.
seriesColorsAnn array of CSS color specifications that will be applied, in order, to the series in the plot.
sortDatafalse to not sort the data passed in by the user.
stackSeriestrue or false, creates a stack or “mountain” plot.
titleTitle object.
methods
initsets the plot target, checks data and applies user options to plot.
resetAxesScaleReset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
reInitializereinitialize plot for replotting.
quickInitQuick reinitialization plot for replotting.
destroyReleases all resources occupied by the plot
replotDoes a reinitialization of the plot followed by a redraw.
redrawEmpties the plot target div and redraws the plot.
drawDraws all elements of the plot into the container.
drawSeriesRedraws all or just one series on the plot.
moveSeriesToFrontThis method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
moveSeriesToBackThis method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
restorePreviousSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its previous state.
restoreOriginalSeriesOrderThis method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
+ +

Properties

These properties are specified at the top of the options object like so:

{
+    axesDefaults:{min:0},
+    series:[{color:'#6633dd'}],
+    title: 'A Plot'
+}
+ +

animate

this.animate = false

True to animate the series on initial plot draw (renderer dependent).  Actual animation functionality must be supported in the renderer.

+ +

animateReplot

this.animateReplot = false

True to animate series after a call to the replot() method.  Use with caution!  Replots can happen very frequently under certain circumstances (e.g. resizing, dragging points) and animation in these situations can cause problems.

+ +

axes

this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}

up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.

+ +

data

this.data = []

user’s data.  Data should NOT be specified in the options object, but be passed in as the second argument to the $.jqplot() function.  The data property is described here soley for reference.  The data should be in the form of an array of 2D or 1D arrays like

[ [[x1, y1], [x2, y2],...], [y1, y2, ...] ].
+ +

dataRenderer

this.dataRenderer

A callable which can be used to preprocess data passed into the plot.  Will be called with 2 arguments, the plot data and a reference to the plot.

+ +

dataRendererOptions

this.dataRendererOptions

Options that will be passed to the dataRenderer.  Can be of any type.

+ +

axesDefaults

default options that will be applied to all axes. see Axis for axes options.

+ +

seriesDefaults

seriesDefaults: {}, series:[] }

default options that will be applied to all series. see Series for series options.

+ +

defaultAxisStart

this.defaultAxisStart = 1

1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.  This is the default starting value for the missing x or y value.  The added data will be a monotonically increasing series (e.g.  [1, 2, 3, ...]) starting at this value.

+ +

fillBetween

this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }

Fill between 2 line series in a plot.  Options object: { series1: first index (0 based) of series in fill series2: second index (0 based) of series in fill color: color of fill [default fillColor of series1] baseSeries: fill will be drawn below this series (0 based index) fill: false to turn off fill [default true].  }

+ +

fontSize

this.fontSize

css spec for the font-size attribute.  Default for the entire plot.

+ +

grid

this.grid = new Grid()

See Grid for grid specific options.

+ +

legend

this.legend = new Legend()

see <$.jqplot.TableLegendRenderer>

+ +

noDataIndicator

Options to set up a mock plot with a data loading indicator if no data is specified.

+ +

series

this.series = []

Array of series object options. see Series for series specific options.

+ +

seriesColors

this.seriesColors = $.jqplot.config.defaultColors

Ann array of CSS color specifications that will be applied, in order, to the series in the plot.  Colors will wrap around so, if their are more series than colors, colors will be reused starting at the beginning.  For pie charts, this specifies the colors of the slices.

+ +

sortData

this.sortData = true

false to not sort the data passed in by the user.  Many bar, stakced and other graphs as well as many plugins depend on having sorted data.

+ +

stackSeries

this.stackSeries = false

true or false, creates a stack or “mountain” plot.  Not all series renderers may implement this option.

+ +

title

this.title = new Title()

Title object.  See Title for specific options.  As a shortcut, you can specify the title option as just a string like: title: ‘My Plot’ and this will create a new title object with the specified text.

+ +

methods

+ +

init

this.init = function(target,
data,
options)

sets the plot target, checks data and applies user options to plot.

+ +

resetAxesScale

this.resetAxesScale = function(axes,
options)

Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.

Parameters

axesBoolean to reset or not reset all axes or an array or object of axis names to reset.
+ +

reInitialize

this.reInitialize = function (data,
opts)

reinitialize plot for replotting. not called directly.

+ +

quickInit

this.quickInit = function ()

Quick reinitialization plot for replotting.  Does not parse options ore recreate axes and series. not called directly.

+ +

destroy

this.destroy = function()

Releases all resources occupied by the plot

+ +

replot

this.replot = function(options)

Does a reinitialization of the plot followed by a redraw.  Method could be used to interactively change plot characteristics and then replot.

Parameters

optionsOptions used for replotting.

Properties

clearfalse to not clear (empty) the plot container before replotting (default: true).
resetAxestrue to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves. optionally pass in list of axes to reset (e.g.  [‘xaxis’, ‘y2axis’]) (default: false).
+ +

redraw

this.redraw = function(clear)

Empties the plot target div and redraws the plot.  This enables plot data and properties to be changed and then to comletely clear the plot and redraw. redraw will not reinitialize any plot elements.  That is, axes will not be autoscaled and defaults will not be reapplied to any plot elements.  redraw is used primarily with zooming.

Parameters

clearfalse to not clear (empty) the plot container before redrawing (default: true).
+ +

draw

this.draw = function()

Draws all elements of the plot into the container.  Does not clear the container before drawing.

+ +

drawSeries

this.drawSeries = function(options,
idx)

Redraws all or just one series on the plot.  No axis scaling is performed and no other elements on the plot are redrawn. options is an options object to pass on to the series renderers.  It can be an empty object {}.  idx is the series index to redraw if only one series is to be redrawn.

+ +

moveSeriesToFront

this.moveSeriesToFront = function (idx)

This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.  This effectively “draws” the specified series on top of all other series, although it is performed through DOM manipulation, no redrawing is performed.

Parameters

idx0 based index of the series to move.  This will be the index of the series as it was first passed into the jqplot function.
+ +

moveSeriesToBack

this.moveSeriesToBack = function (idx)

This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.

Parameters

idx0 based index of the series to move.  This will be the index of the series as it was first passed into the jqplot function.
+ +

restorePreviousSeriesOrder

this.restorePreviousSeriesOrder = function ()

This method requires jQuery 1.4+ Restore the series canvas order to its previous state.  Useful to put a series back where it belongs after moving it to the front.

+ +

restoreOriginalSeriesOrder

this.restoreOriginalSeriesOrder = function ()

This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.

+ +
+ + + + + + + + + + +
This document is out of date.
This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.
this.show = false
Wether to display the axis on the graph.
this.tickRenderer = $.jqplot.AxisTickRenderer
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
A “tick” object showing the value of a tick/gridline on the plot.
this.tickOptions = {}
Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
this.labelRenderer = $.jqplot.AxisLabelRenderer
A class of a rendering engine for creating an axis label.
this.labelOptions = {}
Options passed to the label renderer.
this.label = null
Label for the axis
this.showLabel = true
true to show the axis label.
this.min = null
minimum value of the axis (in data units, not pixels).
this.max = null
maximum value of the axis (in data units, not pixels).
this.autoscale = false
DEPRECATED the default scaling algorithm produces superior results.
this.pad = 1.2
Padding to extend the range above and below the data bounds.
this.padMax = null
Padding to extend the range above data bounds.
this.padMin = null
Padding to extend the range below data bounds.
this.ticks = []
1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
this.numberTicks
Desired number of ticks.
this.tickInterval
number of units between ticks.
this.renderer = $.jqplot.LinearAxisRenderer
A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
this.rendererOptions = {}
renderer specific options.
this.showTicks = true
Wether to show the ticks (both marks and labels) or not.
this.showTickMarks = true
Wether to show the tick marks (line crossing grid) or not.
this.showMinorTicks = true
Wether or not to show minor ticks.
this.drawMajorGridlines = true
True to draw gridlines for major axis ticks.
this.drawMinorGridlines = false
True to draw gridlines for minor ticks.
this.drawMajorTickMarks = true
True to draw tick marks for major axis ticks.
this.drawMinorTickMarks = true
True to draw tick marks for minor ticks.
this.useSeriesColor = false
Use the color of the first series associated with this axis for the tick marks and line bordering this axis.
this.borderWidth = null
width of line stroked at the border of the axis.
this.borderColor = null
color of the border adjacent to the axis.
this.scaleToHiddenSeries = false
True to include hidden series when computing axes bounds and scaling.
this.syncTicks = null
true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
this.tickSpacing = 75
Approximate pixel spacing between ticks on graph.
this.show = false
Wether to display the legend on the graph.
this.location = 'ne'
Placement of the legend.
this.labels = []
Array of labels to use.
this.showLabels = true
true to show the label text on the legend.
this.showSwatches = true
true to show the color swatches on the legend.
this.placement = "insideGrid"
“insideGrid” places legend inside the grid area of the plot.
this.xoffset = 0
DEPRECATED.
this.yoffset = 0
DEPRECATED.
this.border
css spec for the border around the legend box.
this.background
css spec for the background of the legend box.
this.textColor
css color spec for the legend text.
this.fontFamily
css font-family spec for the legend text.
this.fontSize
css font-size spec for the legend text.
this.rowSpacing = '0.5em'
css padding-top spec for the rows in the legend.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.marginTop = null
CSS margin for the legend DOM element.
this.marginRight = null
CSS margin for the legend DOM element.
this.marginBottom = null
CSS margin for the legend DOM element.
this.marginLeft = null
CSS margin for the legend DOM element.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in legend text.
this.text = text
text of the title;
this.show = true
wether or not to show the title
this.fontFamily
css font-family spec for the text.
this.fontSize
css font-size spec for the text.
this.textAlign
css text-align spec for the text.
this.textColor
css color spec for the text.
this.renderer = $.jqplot.DivTitleRenderer
A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
The default title renderer for jqPlot.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in title text.
this.show = true
wether or not to draw the series.
this.xaxis = 'xaxis'
which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
this.yaxis = 'yaxis'
which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
this.renderer = $.jqplot.LineRenderer
A class of a renderer which will draw the series, see $.jqplot.LineRenderer.
The default line renderer for jqPlot, this class has no options beyond the Series class.
this.rendererOptions = {}
Options to pass on to the renderer.
this.label = ''
Line label to use in the legend.
this.showLabel = true
true to show label for this series in the legend.
this.color
css color spec for the series
this.negativeColor
css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
this.lineWidth = 2.5
width of the line in pixels.
this.lineJoin = 'round'
Canvas lineJoin style between segments of series.
this.lineCap = 'round'
Canvas lineCap style at ends of line.
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.shadowAngle = 45
Shadow angle in degrees
this.shadowOffset = 1.25
Shadow offset from line in pixels
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowAlpha = '0.1'
Alpha channel transparency of shadow.
this.breakOnNull = false
Wether line segments should be be broken at null value.
this.markerRenderer = $.jqplot.MarkerRenderer
A class of a renderer which will draw marker (e.g.
this.markerOptions = {}
renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
The default jqPlot marker renderer, rendering the points on the line.
this.showLine = true
wether to actually draw the line or not.
this.showMarker = true
wether or not to show the markers at the data points.
this.index
0 based index of this series in the plot series array.
this.fill = false
true or false, wether to fill under lines or in bars.
this.fillColor
CSS color spec to use for fill under line.
this.fillAlpha
Alpha transparency to apply to the fill under the line.
this.fillAndStroke = false
If true will stroke the line (with color this.color) as well as fill under it.
this.disableStack = false
true to not stack this series with other series in the plot.
this.neighborThreshold = 4
how close or far (in pixels) the cursor must be from a point marker to detect the point.
this.fillToZero = false
true will force bar and filled series to fill toward zero on the fill Axis.
this.fillToValue = 0
fill a filled series to this value on the fill axis.
this.fillAxis = 'y'
Either ‘x’ or ‘y’.
this.useNegativeColors = true
true to color negative values differently in filled and bar charts.
this.drawGridlines = true
wether to draw the gridlines on the plot.
this.gridLineColor = '#cccccc'
color of the grid lines.
this.gridLineWidth = 1.0
width of the grid lines.
this.background = '#fffdf6'
css spec for the background color.
this.borderColor = '#999999'
css spec for the color of the grid border.
this.borderWidth = 2.0
width of the border in pixels.
this.drawBorder = true
True to draw border around grid.
this.shadow = true
wether to show a shadow behind the grid.
this.shadowAngle = 45
shadow angle in degrees
this.shadowOffset = 1.5
Offset of each shadow stroke from the border in pixels
this.shadowWidth = 3
width of the stoke for the shadow
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowColor = null
an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.renderer = $.jqplot.CanvasGridRenderer
Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
The default jqPlot grid renderer, creating a grid on a canvas element.
this.rendererOptions = {}
Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
this.animate = false
True to animate the series on initial plot draw (renderer dependent).
this.animateReplot = false
True to animate series after a call to the replot() method.
this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}
up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
An individual axis object.
this.data = []
user’s data.
this.dataRenderer
A callable which can be used to preprocess data passed into the plot.
this.dataRendererOptions
Options that will be passed to the dataRenderer.
seriesDefaults: {}, series:[] }
default options that will be applied to all series.
this.defaultAxisStart = 1
1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }
Fill between 2 line series in a plot.
this.fontSize
css spec for the font-size attribute.
this.grid = new Grid()
See Grid for grid specific options.
Object representing the grid on which the plot is drawn.
this.legend = new Legend()
see $.jqplot.TableLegendRenderer
this.series = []
Array of series object options.
this.seriesColors = $.jqplot.config.defaultColors
Ann array of CSS color specifications that will be applied, in order, to the series in the plot.
this.sortData = true
false to not sort the data passed in by the user.
this.stackSeries = false
true or false, creates a stack or “mountain” plot.
this.title = new Title()
Title object.
this.init = function(target,
data,
options)
sets the plot target, checks data and applies user options to plot.
this.resetAxesScale = function(axes,
options)
Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
this.reInitialize = function (data,
opts)
reinitialize plot for replotting.
this.quickInit = function ()
Quick reinitialization plot for replotting.
this.destroy = function()
Releases all resources occupied by the plot
this.replot = function(options)
Does a reinitialization of the plot followed by a redraw.
this.redraw = function(clear)
Empties the plot target div and redraws the plot.
this.draw = function()
Draws all elements of the plot into the container.
this.drawSeries = function(options,
idx)
Redraws all or just one series on the plot.
this.moveSeriesToFront = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
this.moveSeriesToBack = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
this.restorePreviousSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its previous state.
this.restoreOriginalSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Copyright © 2009-2012 Chris Leonello
The default jqPlot axis renderer, creating a numeric axis.
An individual data series object.
Plot Title object.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-divTitleRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-divTitleRenderer-js.html new file mode 100644 index 0000000..a3806b9 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-divTitleRenderer-js.html @@ -0,0 +1,39 @@ + + +$.jqplot.DivTitleRenderer + + + + + + + + + +

The default title renderer for jqPlot.  This class has no options beyond the Title class.

+ +
+ + + + + + + + + + +
Plot Title object.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-lineRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-lineRenderer-js.html new file mode 100644 index 0000000..09170ed --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-lineRenderer-js.html @@ -0,0 +1,69 @@ + + +$.jqplot.LineRenderer + + + + + + + + + +

The default line renderer for jqPlot, this class has no options beyond the Series class.  Draws series as a line.

Summary
$.jqplot.LineRendererThe default line renderer for jqPlot, this class has no options beyond the Series class.
Properties
smoothTrue to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
constrainSmoothingTrue to use a more accurate smoothing algorithm that will not overshoot any data points.
bandDataData used to draw error bands or confidence intervals above/below a line.
bandsBanding around line, e.g error bands or confidence intervals.
showtrue to show the bands.
colorcolor of lines at top and bottom of bands [default: series color].
showLinesTrue to show lines at top and bottom of bands [default: false].
fillTrue to fill area between bands [default: true].
fillColorcss color spec for filled area.
intervalUser specified interval above and below line for bands [default: ‘3%’’].
Properties
highlightMouseOverTrue to highlight area on a filled plot when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over an area on a filled plot.
highlightColorcolor to use when highlighting an area on a filled plot.
+ +

Properties

+ +

smooth

this.renderer.smooth = false

True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.  Set to an integer number > 2 to specify number of smoothing points to use between each data point.

+ +

constrainSmoothing

this.renderer.constrainSmoothing = true

True to use a more accurate smoothing algorithm that will not overshoot any data points.  False to allow overshoot but produce a smoother looking line.

+ +

bandData

this.renderer.bandData = []

Data used to draw error bands or confidence intervals above/below a line.

bandData can be input in 3 forms.  jqPlot will figure out which is the low band line and which is the high band line for all forms:

A 2 dimensional array like [[yl1, yl2, ...], [yu1, yu2, ...]] where [yl1, yl2, ...] are y values of the lower line and [yu1, yu2, ...] are y values of the upper line.  In this case there must be the same number of y data points as data points in the series and the bands will inherit the x values of the series.

A 2 dimensional array like [[[xl1, yl1], [xl2, yl2], ...], [[xh1, yh1], [xh2, yh2], ...]] where [xl1, yl1] are x,y data points for the lower line and [xh1, yh1] are x,y data points for the high line. x values do not have to correspond to the x values of the series and can be of any arbitrary length.

Can be of form [[yl1, yu1], [yl2, yu2], [yl3, yu3], ...] where there must be 3 or more arrays and there must be the same number of arrays as there are data points in the series.  In this case, [yl1, yu1] specifies the lower and upper y values for the 1st data point and so on.  The bands will inherit the x values from the series.

+ +

bands

Banding around line, e.g error bands or confidence intervals.

+ +

show

true to show the bands.  If bandData or interval is supplied, show will be set to true by default.

+ +

color

color of lines at top and bottom of bands [default: series color].

+ +

showLines

True to show lines at top and bottom of bands [default: false].

+ +

fill

True to fill area between bands [default: true].

+ +

fillColor

css color spec for filled area.  [default: series color].

+ +

interval

interval: '3%' }

User specified interval above and below line for bands [default: ‘3%’’].  Can be a value like 3 or a string like ‘3%’ or an upper/lower array like [1, -2] or [‘2%’, ‘-1.5%’]

+ +

Properties

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight area on a filled plot when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over an area on a filled plot.  This will be disabled if highlightMouseOver is true.

+ +

highlightColor

this.highlightColor = null

color to use when highlighting an area on a filled plot.

+ +
+ + + + + + + + + + +
An individual data series object.
this.renderer.smooth = false
True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
this.renderer.constrainSmoothing = true
True to use a more accurate smoothing algorithm that will not overshoot any data points.
this.renderer.bandData = []
Data used to draw error bands or confidence intervals above/below a line.
interval: '3%' }
User specified interval above and below line for bands [default: ‘3%’’].
this.highlightMouseOver = true
True to highlight area on a filled plot when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over an area on a filled plot.
this.highlightColor = null
color to use when highlighting an area on a filled plot.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-linearAxisRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-linearAxisRenderer-js.html new file mode 100644 index 0000000..a3669ba --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-linearAxisRenderer-js.html @@ -0,0 +1,61 @@ + + +$.jqplot.LinearAxisRenderer + + + + + + + + + +

The default jqPlot axis renderer, creating a numeric axis.

Summary
$.jqplot.LinearAxisRendererThe default jqPlot axis renderer, creating a numeric axis.
Properties
breakPointsEXPERIMENTAL!! 
breakTickLabelLabel to use at the axis break if breakPoints are specified.
drawBaselineTrue to draw the axis baseline.
baselineWidthwidth of the baseline in pixels.
baselineColorCSS color spec for the baseline.
forceTickAt0This will ensure that there is always a tick mark at 0.
forceTickAt100This will ensure that there is always a tick mark at 100.
tickInsetControls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
minorTicksNumber of ticks to add between “major” ticks.
alignTickstrue to align tick marks across opposed axes such as from the y2axis to yaxis.
+ +

Properties

+ +

breakPoints

this.breakPoints = null

EXPERIMENTAL!!  Use at your own risk!  Works only with linear axes and the default tick renderer.  Array of [start, stop] points to create a broken axis.  Broken axes have a “jump” in them, which is an immediate transition from a smaller value to a larger value.  Currently, axis ticks MUST be manually assigned if using breakPoints by using the axis ticks array option.

+ +

breakTickLabel

this.breakTickLabel = "&asymp

Label to use at the axis break if breakPoints are specified.

+ +

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

+ +

baselineWidth

this.baselineWidth = null

width of the baseline in pixels.

+ +

baselineColor

this.baselineColor = null

CSS color spec for the baseline.

+ +

forceTickAt0

this.forceTickAt0 = false

This will ensure that there is always a tick mark at 0.  If data range is strictly positive or negative, this will force 0 to be inside the axis bounds unless the appropriate axis pad (pad, padMin or padMax) is set to 0, then this will force an axis min or max value at 0.  This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.

+ +

forceTickAt100

this.forceTickAt100 = false

This will ensure that there is always a tick mark at 100.  If data range is strictly above or below 100, this will force 100 to be inside the axis bounds unless the appropriate axis pad (pad, padMin or padMax) is set to 0, then this will force an axis min or max value at 100.  This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.

+ +

tickInset

this.tickInset = 0

Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.  0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.

+ +

minorTicks

this.minorTicks = 0

Number of ticks to add between “major” ticks.  Major ticks are ticks supplied by user or auto computed.  Minor ticks cannot be created by user.

+ +

alignTicks

this.alignTicks = false

true to align tick marks across opposed axes such as from the y2axis to yaxis.

+ +
+ + + + + + + + + + +
this.breakPoints = null
EXPERIMENTAL!! 
this.breakTickLabel = "&asymp
Label to use at the axis break if breakPoints are specified.
this.drawBaseline = true
True to draw the axis baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineColor = null
CSS color spec for the baseline.
this.forceTickAt0 = false
This will ensure that there is always a tick mark at 0.
this.forceTickAt100 = false
This will ensure that there is always a tick mark at 100.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.minorTicks = 0
Number of ticks to add between “major” ticks.
this.alignTicks = false
true to align tick marks across opposed axes such as from the y2axis to yaxis.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-markerRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-markerRenderer-js.html new file mode 100644 index 0000000..304fc36 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-markerRenderer-js.html @@ -0,0 +1,65 @@ + + +$.jqplot.MarkerRenderer + + + + + + + + + +

The default jqPlot marker renderer, rendering the points on the line.

Summary
$.jqplot.MarkerRendererThe default jqPlot marker renderer, rendering the points on the line.
Properties
showwether or not to show the marker.
styleOne of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
lineWidthsize of the line for non-filled markers.
sizeSize of the marker (diameter or circle, length of edge of square, etc.)
colorcolor of marker.
shadowwether or not to draw a shadow on the line
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
shadowRendererRenderer that will draws the shadows on the marker.
shapeRendererRenderer that will draw the marker.
+ +

Properties

+ +

show

this.show = true

wether or not to show the marker.

+ +

style

this.style = 'filledCircle'

One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare

+ +

lineWidth

this.lineWidth = 2

size of the line for non-filled markers.

+ +

size

this.size = 9.0

Size of the marker (diameter or circle, length of edge of square, etc.)

+ +

color

this.color = '#666666'

color of marker.  Will be set to color of series by default on init.

+ +

shadow

this.shadow = true

wether or not to draw a shadow on the line

+ +

shadowAngle

this.shadowAngle = 45

Shadow angle in degrees

+ +

shadowOffset

this.shadowOffset = 1

Shadow offset from line in pixels

+ +

shadowDepth

this.shadowDepth = 3

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

+ +

shadowAlpha

this.shadowAlpha = '0.07'

Alpha channel transparency of shadow.  0 = transparent.

+ +

shadowRenderer

this.shadowRenderer = new $.jqplot.ShadowRenderer()

Renderer that will draws the shadows on the marker.

+ +

shapeRenderer

this.shapeRenderer = new $.jqplot.ShapeRenderer()

Renderer that will draw the marker.

+ +
+ + + + + + + + + + +
this.show = true
wether or not to show the marker.
this.style = 'filledCircle'
One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
this.lineWidth = 2
size of the line for non-filled markers.
this.size = 9.0
Size of the marker (diameter or circle, length of edge of square, etc.)
this.color = '#666666'
color of marker.
this.shadow = true
wether or not to draw a shadow on the line
this.shadowAngle = 45
Shadow angle in degrees
this.shadowOffset = 1
Shadow offset from line in pixels
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowRenderer = new $.jqplot.ShadowRenderer()
Renderer that will draws the shadows on the marker.
this.shapeRenderer = new $.jqplot.ShapeRenderer()
Renderer that will draw the marker.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-shadowRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-shadowRenderer-js.html new file mode 100644 index 0000000..7d5fb69 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-shadowRenderer-js.html @@ -0,0 +1,61 @@ + + +$.jqplot.shadowRenderer + + + + + + + + + +

The default jqPlot shadow renderer, rendering shadows behind shapes.

Summary
$.jqplot.shadowRendererThe default jqPlot shadow renderer, rendering shadows behind shapes.
Properties
angleAngle of the shadow in degrees.
offsetPixel offset at the given shadow angle of each shadow stroke from the last stroke.
alphaalpha transparency of shadow stroke.
lineWidthwidth of the shadow line stroke.
lineJoinHow line segments of the shadow are joined.
lineCaphow ends of the shadow line are rendered.
fillwhether to fill the shape.
depthhow many times the shadow is stroked.
isarcwether the shadow is an arc or not.
drawdraws an transparent black (i.e.
+ +

Properties

+ +

angle

this.angle = 45

Angle of the shadow in degrees.  Measured counter-clockwise from the x axis.

+ +

offset

this.offset = 1

Pixel offset at the given shadow angle of each shadow stroke from the last stroke.

+ +

alpha

this.alpha = 0.07

alpha transparency of shadow stroke.

+ +

lineWidth

this.lineWidth = 1.5

width of the shadow line stroke.

+ +

lineJoin

this.lineJoin = 'miter'

How line segments of the shadow are joined.

+ +

lineCap

this.lineCap = 'round'

how ends of the shadow line are rendered.

+ +

fill

this.fill = false

whether to fill the shape.

+ +

depth

this.depth = 3

how many times the shadow is stroked.  Each stroke will be offset by offset at angle degrees.

+ +

isarc

this.isarc = false

wether the shadow is an arc or not.

+ +

draw

$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)

draws an transparent black (i.e. gray) shadow.

ctxcanvas drawing context
pointsarray of points or [x, y, radius, start angle (rad), end angle (rad)]
+ +
+ + + + + + + + + + +
this.angle = 45
Angle of the shadow in degrees.
this.offset = 1
Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
this.alpha = 0.07
alpha transparency of shadow stroke.
this.lineWidth = 1.5
width of the shadow line stroke.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.fill = false
whether to fill the shape.
this.depth = 3
how many times the shadow is stroked.
this.isarc = false
wether the shadow is an arc or not.
$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)
draws an transparent black (i.e.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-shapeRenderer-js.html b/public/javascripts/jqplot/docs/files/jqplot-shapeRenderer-js.html new file mode 100644 index 0000000..a063dea --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-shapeRenderer-js.html @@ -0,0 +1,65 @@ + + +$.jqplot.shapeRenderer + + + + + + + + + +

The default jqPlot shape renderer.  Given a set of points will plot them and either stroke a line (fill = false) or fill them (fill = true).  If a filled shape is desired, closePath = true must also be set to close the shape.

Summary
$.jqplot.shapeRendererThe default jqPlot shape renderer.
Properties
linePatternline pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
lineJoinHow line segments of the shadow are joined.
lineCaphow ends of the shadow line are rendered.
fillwhether to fill the shape.
isarcwether the shadow is an arc or not.
fillRecttrue to draw shape as a filled rectangle.
strokeRecttrue to draw shape as a stroked rectangle.
clearRecttrue to cear a rectangle.
strokeStylecss color spec for the stoke style
fillStylecss color spec for the fill style.
Functions
drawdraws the shape.
+ +

Properties

+ +

linePattern

this.linePattern = 'solid'

line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’ characters such as ‘.-.’ or a numerical array like [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, [1, 10, 20, 10] to draw a dot-dash line, and so on.

+ +

lineJoin

this.lineJoin = 'miter'

How line segments of the shadow are joined.

+ +

lineCap

this.lineCap = 'round'

how ends of the shadow line are rendered.

+ +

fill

this.fill = false

whether to fill the shape.

+ +

isarc

this.isarc = false

wether the shadow is an arc or not.

+ +

fillRect

this.fillRect = false

true to draw shape as a filled rectangle.

+ +

strokeRect

this.strokeRect = false

true to draw shape as a stroked rectangle.

+ +

clearRect

this.clearRect = false

true to cear a rectangle.

+ +

strokeStyle

this.strokeStyle = '#999999'

css color spec for the stoke style

+ +

fillStyle

this.fillStyle = '#999999'

css color spec for the fill style.

+ +

Functions

+ +

draw

$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)

draws the shape.

ctxcanvas drawing context
pointsarray of points for shapes or [x, y, width, height] for rectangles or [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.
+ +
+ + + + + + + + + + +
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.fill = false
whether to fill the shape.
this.isarc = false
wether the shadow is an arc or not.
this.fillRect = false
true to draw shape as a filled rectangle.
this.strokeRect = false
true to draw shape as a stroked rectangle.
this.clearRect = false
true to cear a rectangle.
this.strokeStyle = '#999999'
css color spec for the stoke style
this.fillStyle = '#999999'
css color spec for the fill style.
$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)
draws the shape.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-themeEngine-js.html b/public/javascripts/jqplot/docs/files/jqplot-themeEngine-js.html new file mode 100644 index 0000000..54fb438 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-themeEngine-js.html @@ -0,0 +1,191 @@ + + +$.jqplot.ThemeEngine + + + + + + + + + +

Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.  A theme engine instance is created with each plot.  The theme engine manages a collection of themes which can be modified, added to, or applied to the plot.

The themeEngine class is not instantiated directly.  When a plot is initialized, the current plot options are scanned an a default theme named “Default” is created.  This theme is used as the basis for other themes added to the theme engine and is always available.

A theme is a simple javascript object with styling parameters for various entities of the plot.  A theme has the form:

{
+    _name:f "Default",
+    target: {
+        backgroundColor: "transparent"
+    },
+    legend: {
+        textColor: null,
+        fontFamily: null,
+        fontSize: null,
+        border: null,
+        background: null
+    },
+    title: {
+        textColor: "rgb(102, 102, 102)",
+        fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
+        fontSize: "19.2px",
+        textAlign: "center"
+    },
+    seriesStyles: {},
+    series: [{
+        color: "#4bb2c5",
+        lineWidth: 2.5,
+        linePattern: "solid",
+        shadow: true,
+        fillColor: "#4bb2c5",
+        showMarker: true,
+        markerOptions: {
+            color: "#4bb2c5",
+            show: true,
+            style: 'filledCircle',
+            lineWidth: 1.5,
+            size: 4,
+            shadow: true
+        }
+    }],
+    grid: {
+        drawGridlines: true,
+        gridLineColor: "#cccccc",
+        gridLineWidth: 1,
+        backgroundColor: "#fffdf6",
+        borderColor: "#999999",
+        borderWidth: 2,
+        shadow: true
+    },
+    axesStyles: {
+        label: {},
+        ticks: {}
+    },
+    axes: {
+        xaxis: {
+            borderColor: "#999999",
+            borderWidth: 2,
+            ticks: {
+                show: true,
+                showGridline: true,
+                showLabel: true,
+                showMark: true,
+                size: 4,
+                textColor: "",
+                whiteSpace: "nowrap",
+                fontSize: "12px",
+                fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
+            },
+            label: {
+                textColor: "rgb(102, 102, 102)",
+                whiteSpace: "normal",
+                fontSize: "14.6667px",
+                fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
+                fontWeight: "400"
+            }
+        },
+        yaxis: {
+            borderColor: "#999999",
+            borderWidth: 2,
+            ticks: {
+                show: true,
+                showGridline: true,
+                showLabel: true,
+                showMark: true,
+                size: 4,
+                textColor: "",
+                whiteSpace: "nowrap",
+                fontSize: "12px",
+                fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
+            },
+            label: {
+                textColor: null,
+                whiteSpace: null,
+                fontSize: null,
+                fontFamily: null,
+                fontWeight: null
+            }
+        },
+        x2axis: {...
+        },
+        ...
+        y9axis: {...
+        }
+    }
+}

”seriesStyles” is a style object that will be applied to all series in the plot.  It will forcibly override any styles applied on the individual series.  “axesStyles” is a style object that will be applied to all axes in the plot.  It will also forcibly override any styles on the individual axes.

The example shown above has series options for a line series.  Options for other series types are shown below:

Bar Series

{
+    color: "#4bb2c5",
+    seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+    lineWidth: 2.5,
+    shadow: true,
+    barPadding: 2,
+    barMargin: 10,
+    barWidth: 15.09375,
+    highlightColors: ["rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)"]
+}

Pie Series

{
+    seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+    padding: 20,
+    sliceMargin: 0,
+    fill: true,
+    shadow: true,
+    startAngle: 0,
+    lineWidth: 2.5,
+    highlightColors: ["rgb(129,201,214)", "rgb(240,189,104)", "rgb(214,202,165)", "rgb(137,180,158)", "rgb(168,180,137)", "rgb(180,174,89)", "rgb(180,113,161)", "rgb(129,141,236)", "rgb(227,205,120)", "rgb(255,138,76)", "rgb(76,169,219)", "rgb(215,126,190)", "rgb(220,232,135)", "rgb(200,167,96)", "rgb(103,202,235)", "rgb(208,154,215)"]
+}

Funnel Series

{
+    color: "#4bb2c5",
+    lineWidth: 2,
+    shadow: true,
+    padding: {
+        top: 20,
+        right: 20,
+        bottom: 20,
+        left: 20
+    },
+    sectionMargin: 6,
+    seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
+    highlightColors: ["rgb(147,208,220)", "rgb(242,199,126)", "rgb(220,210,178)", "rgb(154,191,172)", "rgb(180,191,154)", "rgb(191,186,112)", "rgb(191,133,174)", "rgb(147,157,238)", "rgb(231,212,139)", "rgb(255,154,102)", "rgb(102,181,224)", "rgb(221,144,199)", "rgb(225,235,152)", "rgb(200,167,96)", "rgb(124,210,238)", "rgb(215,169,221)"]
+}
Summary
$.jqplot.ThemeEngineTheme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.
Properties
themeshash of themes managed by the theme engine.
activeThemePointer to currently active theme
methods
getGet and return the named theme or the active theme if no name given.
getThemeNamesReturn the list of theme names in this manager in alpha-numerical order.
getThemesReturn a list of themes in alpha-numerical order by name.
removeRemove the given theme from the themeEngine.
newThemeCreate a new theme based on the default theme, adding it the themeEngine.
renameRename a theme.
copyCreate a copy of an existing theme in the themeEngine, adding it the themeEngine.
+ +

Properties

+ +

themes

this.themes = {}

hash of themes managed by the theme engine.  Indexed by theme name.

+ +

activeTheme

this.activeTheme=null

Pointer to currently active theme

+ +

methods

+ +

get

$.jqplot.ThemeEngine.prototype.get = function(name)

Get and return the named theme or the active theme if no name given.

parameter

namename of theme to get.

returns

Theme instance of given name.

+ +

getThemeNames

$.jqplot.ThemeEngine.prototype.getThemeNames = function()

Return the list of theme names in this manager in alpha-numerical order.

parameter

None

returns

A the list of theme names in this manager in alpha-numerical order.

+ +

getThemes

$.jqplot.ThemeEngine.prototype.getThemes = function()

Return a list of themes in alpha-numerical order by name.

parameter

None

returns

A list of themes in alpha-numerical order by name.

+ +

remove

$.jqplot.ThemeEngine.prototype.remove = function(name)

Remove the given theme from the themeEngine.

parameters

namename of the theme to remove.

returns

true on success, false on failure.

+ +

newTheme

$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)

Create a new theme based on the default theme, adding it the themeEngine.

parameters

namename of the new theme.
objoptional object of styles to be applied to this new theme.

returns

new Theme object.

+ +

rename

$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)

Rename a theme.

parameters

oldNamecurrent name of the theme.
newNamedesired name of the theme.

returns

new Theme object.

+ +

copy

$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)

Create a copy of an existing theme in the themeEngine, adding it the themeEngine.

parameters

sourceNamename of the existing theme.
targetNamename of the copy.
objoptional object of style parameter to apply to the new theme.

returns

new Theme object.

+ +
+ + + + + + + + + + +
this.themes = {}
hash of themes managed by the theme engine.
this.activeTheme=null
Pointer to currently active theme
$.jqplot.ThemeEngine.prototype.get = function(name)
Get and return the named theme or the active theme if no name given.
$.jqplot.ThemeEngine.prototype.getThemeNames = function()
Return the list of theme names in this manager in alpha-numerical order.
$.jqplot.ThemeEngine.prototype.getThemes = function()
Return a list of themes in alpha-numerical order by name.
$.jqplot.ThemeEngine.prototype.remove = function(name)
Remove the given theme from the themeEngine.
$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)
Create a new theme based on the default theme, adding it the themeEngine.
$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)
Rename a theme.
$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)
Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/jqplot-toImage-js.html b/public/javascripts/jqplot/docs/files/jqplot-toImage-js.html new file mode 100644 index 0000000..5a3896c --- /dev/null +++ b/public/javascripts/jqplot/docs/files/jqplot-toImage-js.html @@ -0,0 +1,39 @@ + + +$.fn + + + + + + + + + +

jQuery namespace to attach functions to jQuery elements.

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/optionsTutorial-txt.html b/public/javascripts/jqplot/docs/files/optionsTutorial-txt.html new file mode 100644 index 0000000..d38cd3d --- /dev/null +++ b/public/javascripts/jqplot/docs/files/optionsTutorial-txt.html @@ -0,0 +1,120 @@ + + +Options Tutorial + + + + + + + + + +

This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.  For a listing of options available to jqPlot, see jqPlot Options in the jqPlotOptions.txt file.

The key to effectively using jqPlot is understanding jqPlot’s options.  The online documentation is API documentation.  While it explains what attributes and methods various objects posses, it doesn’t explain how to use or set those attributes through options.  This tutorial will help explain that.

Lets assume you are creating a plot like this:

chart = $.jqplot('chart', dataSeries, optionsObj);

First, note that you shouldn’t try to directly set attributes on the “chart” object (like chart.grid.shadow) after your call to $.jqplot().  At best this won’t do anything **(see below).  You should pass options in via the “optionsObj”.

the optionsObj really represents the plot object (jqPlot object, not to be confused with the $.jqplot function which will create a jqPlot object).  Attributes you specify on that object will be merged with attributes in the jqPlot object.  The axes, legend, series, etc. are attributes on the jqPlot object.  The jqPlot/optionsObj object looks something like (only some attributes shown):

jqPlot-|
+       |-seriesColors
+       |-textColor
+       |-fontFamily
+       |-fontSize
+       |-stackSeries
+       |-series(Array)-|
+       |               |-Series1-|
+       |               |         |-lineWidth
+       |               |         |-linePattern
+       |               |         |-shadow
+       |               |         |-showLine
+       |               |         |-showMarker
+       |               |         |-color
+       |               |-Series2...
+       |               |-...
+       |               |-SeriesN
+       |
+       |-grid(Object)-|
+       |              |-drawGridLines
+       |              |-background
+       |              |-borderColor
+       |              |-borderWidth
+       |              |-shadow
+       |
+       |-title(Object)-|
+       |               |-text
+       |               |-show
+       |               |-fontFamily
+       |               |-fontSize
+       |               |-textAlign
+       |               |-textColor
+       |
+       |-axes(Object)-|
+       |              |-xais-|
+       |              |      |-min
+       |              |      |-max
+       |              |      |-numberTicks
+       |              |      |-showTicks
+       |              |      |-showTickMarks
+       |              |      |-pad
+       |
+       | ... and so on

The optionsObj should follow the same construction as if it were a jqPlot object (with some exceptions/shortcuts I’ll mention in a moment).  So generally, when you see something like “this.drawGridLines” in the grid properties in the docs, just replace “this” with “grid” in your options object.  So it becomes optionsObj.grid.drawGridLines.  Do likewise with the other objects in the plot, replacing “this”, with the respective attribute on the plot like “legend” or “title”.  Series and Axes are handled a little different, because series is an array and axes has 4 distinct children “xaxis”, “yaxis”, “x2axis” and “y2axis”.

So, to remove the shadow from the grid and change the grid border size you would do:

optionObj = {grid:{shadow:false, borderWidth:9.0}};

To do the same as above but also make all the text in the plot red you would do:

optionObj = {
+   textColor:"#ff0000",
+   grid:{shadow:false, borderWidth:9.0}
+}

Here is a more deeply nested example.  Say you want to specify a min and max on your y axis and use a specific color for your second series.  That would look like:

optionsObj = {
+   axes:{yaxis:{min:5, max:230}},
+   series:[{},{color:"#33ff66"}]
+}

Note that series options are an array in order of the series data you sent in to your plot.  To get to the second series, you have to put an object (even if empty) in place of the first series.

There is a handy shortcut to assign options to all axes or all series at one go.  Use axesDefaults and seriesDefaults.  So, if you wanted both x and y axes to start at 0 and you wanted all series to not show markers, you could do:

optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}

Another shortcut is for the plot title.  Normally, you would assign options to the title as an object.  If you specify a title option as a string, it will assign that to the title.text property automatically.  So these two are equivalent:

optionsObj = {title:{text:"My Plot"}}

and

optionsObj = {title:"My Plot"}

Where things need more explaination is with renderers, plugins and their options.  Briefly, what’s renderer, what’s a plugin.

A renderer is an object that is used to draw something and gets attached to an existing object in the plot in order to draw it.  A plugin does more than just provide drawing functionality to an object.  It will do more like calculate a trend line, change the cursor, provide event driven functionality, etc.  I consider renderers plugins, but plugins don’t have to be renderers.

So, how do you use renderers, plugins, and specify their options?  Some common renderes are for bar charts and category axes.  If you want to render your series as a bar chart with each set of bars showing up in a category on the x axis, you do:

optionsObj = {
+   seriesDefaults:{renderer:$.jqplot.BarRenderer},
+   axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
+}

This replaces the default renderer used for all series in the plot with a bar renderer and the x axis default renderer (but not any other axis) with a category renderer.

Now, how would I assign options to those renderers?  The renderer’s attributes may not be present in the pre-existing jqPlot object, they may be specific to the renderer.  This is done through the “rendererOptions” option on the appropriate object.  So, if I wanted my bars to be 25 pixels wide, I would do:

optionsObj = {
+   seriesDefaults:{
+       renderer:$.jqplot.BarRenderer},
+       rendererOptions:{
+           barWidth:25
+       },
+   axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
+}

Again, this is using the “seriesDefaults” option, which will apply options to all series in the plot.  You could do the same on any particular series in the plot through the “series” options array.

Plugins are free to add their own options.  For example, the highlighter plugin has it’s own set of options that are unique to it.  As a result, it responds to options placed in the “highlighter” attribute of your options object.  So, if I wanted to change the highlighter tooltip to fade in and out slowly and be positioned directly above the point I’m highlighting:

optionsObj = {
+    highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
+}

Other plugins, like dragable and trendlines, add their options in with the series.  This is because both of those plugins can have different options for different series in the plot.  So, if you wanted to specify the color of the dragable and constrain it to drag only on the x axis as well as specify the color of the trend line you could do:

series:[{
+    dragable: {
+        color: '#ff3366',
+        constrainTo: 'x'
+    },
+    trendline: {
+        color: '#cccccc'
+    }
+}]

This would apply those options to the first series only.  If you had 2 series and wanted to turn off dragging and trend lines on the second series, you could do:

series:[{
+    dragable: {
+        color: '#ff3366',
+        constrainTo: 'x'
+    },
+    trendline: {
+        color: '#cccccc'
+    }
+}, {
+   isDragable: false,
+   trendline:{
+       show: false
+   }
+}]

Note, series dragability is turned off with the “isDragable” option directly on the series itself, not with a suboption of “dragable”.  This may be improved in the future.

I hope this is helpful.  A few key points to remember:

  • When you see “this” in the api docs, you generally replace it with the name of the object (in lowercase) you are looking at in your options object.
  • seriesDefaults and axesDefaults are convenient shortcuts.
  • to assign options to a renderer, generally use the “rendererOptions”
  • plugins may add their own options attribute, like “highlighter” or “cursor”.

** Note: you can set attributes after the plot is created (like plot.grid.shadow = false), but you’ll have to issue the appropriate calls to possibly reinitialize and redraw the plot.  jqPlot can definitely handle this to change the plot after creation (this is how the dragable plugin updates the plot data and the trend line plugin recomputes itself when data changes).  This hasn’t been documented yet, however.

+ +
+ + + + + + + + + + +
This document is out of date.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html new file mode 100644 index 0000000..312db43 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html @@ -0,0 +1,45 @@ + + +$.jqplot.BezierCurveRenderer.js + + + + + + + + + +

Renderer which draws lines as stacked bezier curves.  Data for the line will not be specified as an array of [x, y] data point values, but as a an array of [start piont, bezier curve] So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]].

Summary
$.jqplot.BezierCurveRenderer.jsRenderer which draws lines as stacked bezier curves.
Functions
setGridDataconverts the user data values to grid coordinates and stores them in the gridData array.
makeGridDataconverts any arbitrary data values to grid coordinates and returns them.
+ +

Functions

+ +

setGridData

$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)

converts the user data values to grid coordinates and stores them in the gridData array.  Called with scope of a series.

+ +

makeGridData

$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)

converts any arbitrary data values to grid coordinates and returns them.  This method exists so that plugins can use a series’ linerenderer to generate grid data points without overwriting the grid data associated with that series.  Called with scope of a series.

+ +
+ + + + + + + + + + +
$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-barRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-barRenderer-js.html new file mode 100644 index 0000000..21560d9 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-barRenderer-js.html @@ -0,0 +1,69 @@ + + +$.jqplot.BarRenderer + + + + + + + + + +

A plugin renderer for jqPlot to draw a bar plot.  Draws series as a line.

Summary
$.jqplot.BarRendererA plugin renderer for jqPlot to draw a bar plot.
Properties
barPaddingNumber of pixels between adjacent bars at the same axis value.
barMarginNumber of pixels between groups of bars at adjacent axis values.
barDirection‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
barWidthWidth of the bar in pixels (auto by devaul).
shadowOffsetoffset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
waterfalltrue to enable waterfall plot.
groupsgroup bars into this many groups
varyBarColortrue to color each bar of a series separately rather than have every bar of a given series the same color.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a bar.
transposedDataNOT IMPLEMENTED YET.
+ +

Properties

+ +

barPadding

this.barPadding = 8

Number of pixels between adjacent bars at the same axis value.

+ +

barMargin

this.barMargin = 10

Number of pixels between groups of bars at adjacent axis values.

+ +

barDirection

this.barDirection = 'vertical'

’vertical’ = up and down bars, ‘horizontal’ = side to side bars

+ +

barWidth

this.barWidth = null

Width of the bar in pixels (auto by devaul).  null = calculated automatically.

+ +

shadowOffset

this.shadowOffset = 2

offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.

+ +

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

+ +

shadowAlpha

this.shadowAlpha = 0.08

transparency of the shadow (0 = transparent, 1 = opaque)

+ +

waterfall

this.waterfall = false

true to enable waterfall plot.

+ +

groups

this.groups = 1

group bars into this many groups

+ +

varyBarColor

this.varyBarColor = false

true to color each bar of a series separately rather than have every bar of a given series the same color.  If used for non-stacked multiple series bar plots, user should specify a separate ‘seriesColors’ array for each series.  Otherwise, each series will set their bars to the same color array.  This option has no Effect for stacked bar charts and is disabled.

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

+ +

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a bar.

+ +

transposedData

this.transposedData = true

NOT IMPLEMENTED YET.  True if this is a horizontal bar plot and x and y values are “transposed”.  Tranposed, or “swapped”, data is required prior to rev.  894 builds of jqPlot with horizontal bars.  Allows backward compatability of bar renderer horizontal bars with old style data sets.

+ +
+ + + + + + + + + + +
this.barPadding = 8
Number of pixels between adjacent bars at the same axis value.
this.barMargin = 10
Number of pixels between groups of bars at adjacent axis values.
this.barDirection = 'vertical'
‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
this.barWidth = null
Width of the bar in pixels (auto by devaul).
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowAlpha = 0.08
transparency of the shadow (0 = transparent, 1 = opaque)
this.waterfall = false
true to enable waterfall plot.
this.groups = 1
group bars into this many groups
this.varyBarColor = false
true to color each bar of a series separately rather than have every bar of a given series the same color.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a bar.
this.transposedData = true
NOT IMPLEMENTED YET.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html new file mode 100644 index 0000000..df38cb4 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html @@ -0,0 +1,53 @@ + + +$.jqplot.BlockRenderer + + + + + + + + + +

Plugin renderer to draw a x-y block chart.  A Block chart has data points displayed as colored squares with a text label inside.  Data must be supplied in the form:

[[x1, y1, "label 1", {css}], [x2, y2, "label 2", {css}], ...]

The label and css object are optional.  If the label is ommitted, the box will collapse unless a css height and/or width is specified.

The css object is an object specifying css properties such as:

{background:'#4f98a5', border:'3px solid gray', padding:'1px'}

Note that css properties specified with the data point override defaults specified with the series.

Summary
$.jqplot.BlockRendererPlugin renderer to draw a x-y block chart.
Properties
cssdefault css styles that will be applied to all data blocks.
escapeHtmltrue to escape html in the box label.
insertBreakstrue to turn spaces in data block label into html breaks <br />.
varyBlockColorstrue to vary the color of each block in this series according to the seriesColors array.
Methods
moveBlockMoves an individual block.
+ +

Properties

+ +

css

this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}

default css styles that will be applied to all data blocks. these values will be overridden by css styles supplied with the individulal data points.

+ +

escapeHtml

this.escapeHtml = false

true to escape html in the box label.

+ +

insertBreaks

this.insertBreaks = true

true to turn spaces in data block label into html breaks <br />.

+ +

varyBlockColors

this.varyBlockColors = false

true to vary the color of each block in this series according to the seriesColors array.  False to set each block to the color specified on this series.  This has no effect if a css background color option is specified in the renderer css options.

+ +

Methods

+ +

moveBlock

this.moveBlock = function (idx,
x,
y,
duration)

Moves an individual block.  More efficient than redrawing the whole series by calling plot.drawSeries().  Properties: idx - the 0 based index of the block or point in this series. x - the x coordinate in data units (value on x axis) to move the block to. y - the y coordinate in data units (value on the y axis) to move the block to. duration - optional parameter to create an animated movement.  Can be a number (higher is slower animation) or ‘fast’, ‘normal’ or ‘slow’.  If not provided, the element is moved without any animation.

+ +
+ + + + + + + + + + +
this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}
default css styles that will be applied to all data blocks.
this.escapeHtml = false
true to escape html in the box label.
this.insertBreaks = true
true to turn spaces in data block label into html breaks br /.
this.varyBlockColors = false
true to vary the color of each block in this series according to the seriesColors array.
this.moveBlock = function (idx,
x,
y,
duration)
Moves an individual block.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html new file mode 100644 index 0000000..519071a --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html @@ -0,0 +1,71 @@ + + +$.jqplot.BubbleRenderer + + + + + + + + + +

Plugin renderer to draw a bubble chart.  A Bubble chart has data points displayed as colored circles with an optional text label inside.  To use the bubble renderer, you must include the bubble renderer like:

<script language="javascript" type="text/javascript" src="../src/plugins/jqplot.bubbleRenderer.js"></script>

Data must be supplied in the form:

[[x1, y1, r1, <label or {label:'text', color:color}>], ...]

where the label or options object is optional.

Note that all bubble colors will be the same unless the “varyBubbleColors” option is set to true.  Colors can be specified in the data array or in the seriesColors array option on the series.  If no colors are defined, the default jqPlot series of 16 colors are used.  Colors are automatically cycled around again if there are more bubbles than colors.

Bubbles are autoscaled by default to fit within the chart area while maintaining relative sizes.  If the “autoscaleBubbles” option is set to false, the r(adius) values in the data array a treated as literal pixel values for the radii of the bubbles.

Properties are passed into the bubble renderer in the rendererOptions object of the series options like:

seriesDefaults: {
+    renderer: $.jqplot.BubbleRenderer,
+    rendererOptions: {
+        bubbleAlpha: 0.7,
+        varyBubbleColors: false
+    }
+}
Summary
$.jqplot.BubbleRendererPlugin renderer to draw a bubble chart.
Properties
varyBubbleColorsTrue to vary the color of each bubble in this series according to the seriesColors array.
autoscaleBubblesTrue to scale the bubble radius based on plot size.
autoscaleMultiplierMultiplier the bubble size if autoscaleBubbles is true.
autoscalePointsFactorFactor which decreases bubble size based on how many bubbles on on the chart.
escapeHtmlTrue to escape html in bubble label text.
highlightMouseOverTrue to highlight bubbles when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a bubble.
highlightColorsAn array of colors to use when highlighting a slice.
bubbleAlphaAlpha transparency to apply to all bubbles in this series.
highlightAlphaAlpha transparency to apply when highlighting bubble.
bubbleGradientsTrue to color the bubbles with gradient fills instead of flat colors.
showLabelsTrue to show labels on bubbles (if any), false to not show.
+ +

Properties

+ +

varyBubbleColors

this.varyBubbleColors = true

True to vary the color of each bubble in this series according to the seriesColors array.  False to set each bubble to the color specified on this series.  This has no effect if a css background color option is specified in the renderer css options.

+ +

autoscaleBubbles

this.autoscaleBubbles = true

True to scale the bubble radius based on plot size.  False will use the radius value as provided as a raw pixel value for bubble radius.

+ +

autoscaleMultiplier

this.autoscaleMultiplier = 1.0

Multiplier the bubble size if autoscaleBubbles is true.

+ +

autoscalePointsFactor

this.autoscalePointsFactor = -0.07

Factor which decreases bubble size based on how many bubbles on on the chart.  0 means no adjustment for number of bubbles.  Negative values will decrease size of bubbles as more bubbles are added.  Values between 0 and -0.2 should work well.

+ +

escapeHtml

this.escapeHtml = true

True to escape html in bubble label text.

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight bubbles when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a bubble.  This will be disabled if highlightMouseOver is true.

+ +

highlightColors

this.highlightColors = []

An array of colors to use when highlighting a slice.  Calculated automatically if not supplied.

+ +

bubbleAlpha

this.bubbleAlpha = 1.0

Alpha transparency to apply to all bubbles in this series.

+ +

highlightAlpha

this.highlightAlpha = null

Alpha transparency to apply when highlighting bubble.  Set to value of bubbleAlpha by default.

+ +

bubbleGradients

this.bubbleGradients = false

True to color the bubbles with gradient fills instead of flat colors.  NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills. will be ignored in IE.

+ +

showLabels

this.showLabels = true

True to show labels on bubbles (if any), false to not show.

+ +
+ + + + + + + + + + +
this.varyBubbleColors = true
True to vary the color of each bubble in this series according to the seriesColors array.
this.autoscaleBubbles = true
True to scale the bubble radius based on plot size.
this.autoscaleMultiplier = 1.0
Multiplier the bubble size if autoscaleBubbles is true.
this.autoscalePointsFactor = -0.07
Factor which decreases bubble size based on how many bubbles on on the chart.
this.escapeHtml = true
True to escape html in bubble label text.
this.highlightMouseOver = true
True to highlight bubbles when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a bubble.
this.highlightColors = []
An array of colors to use when highlighting a slice.
this.bubbleAlpha = 1.0
Alpha transparency to apply to all bubbles in this series.
this.highlightAlpha = null
Alpha transparency to apply when highlighting bubble.
this.bubbleGradients = false
True to color the bubbles with gradient fills instead of flat colors.
this.showLabels = true
True to show labels on bubbles (if any), false to not show.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html new file mode 100644 index 0000000..3c8da0c --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html @@ -0,0 +1,63 @@ + + +$.jqplot.CanvasAxisLabelRenderer + + + + + + + + + +

Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.  This renderer uses a separate rendering engine to draw the text on the canvas.  Two modes of rendering the text are available.  If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.  You do so by setting the “enableFontSupport” option to true.

Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.  Even if the “enableFontSupport” option is true non-supporting browsers will still render with the Hershey font.

Summary
$.jqplot.CanvasAxisLabelRendererRenderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.
Properties
angleangle of text, measured clockwise from x axis.
showwether or not to show the tick (mark and label).
showLabelwether or not to show the label.
labellabel for the axis.
fontFamilyCSS spec for the font-family css attribute.
fontSizeCSS spec for font size.
fontWeight
fontStretchMultiplier to condense or expand font width.
textColorcss spec for the color attribute.
enableFontSupporttrue to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
pt2pxPoint to pixel scaling factor, used for computing height of bounding box around a label.
+ +

Properties

+ +

angle

this.angle = 0

angle of text, measured clockwise from x axis.

+ +

show

this.show = true

wether or not to show the tick (mark and label).

+ +

showLabel

this.showLabel = true

wether or not to show the label.

+ +

label

this.label = ''

label for the axis.

+ +

fontFamily

this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'

CSS spec for the font-family css attribute.  Applies only to browsers supporting native font rendering in the canvas tag.  Currently Mozilla 3.5 and Safari 4.

+ +

fontSize

this.fontSize = '11pt'

CSS spec for font size.

+ +

fontWeight

this.fontWeight = 'normal'
CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100900
+ +

fontStretch

this.fontStretch = 1.0

Multiplier to condense or expand font width.  Applies only to browsers which don’t support canvas native font rendering.

+ +

textColor

this.textColor = '#666666'

css spec for the color attribute.

+ +

enableFontSupport

this.enableFontSupport = true

true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.  If true, label will be drawn with canvas tag native support for fonts.  If false, label will be drawn with Hershey font metrics.

+ +

pt2px

this.pt2px = null

Point to pixel scaling factor, used for computing height of bounding box around a label.  The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.  Leave as null to use default.  If tops of letters appear clipped, increase this.  If bounding box seems too big, decrease.  This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.

+ +
+ + + + + + + + + + +
this.angle = 0
angle of text, measured clockwise from x axis.
this.show = true
wether or not to show the tick (mark and label).
this.showLabel = true
wether or not to show the label.
this.label = ''
label for the axis.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
CSS spec for the font-family css attribute.
this.fontSize = '11pt'
CSS spec for font size.
this.fontWeight = 'normal'
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.textColor = '#666666'
css spec for the color attribute.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html new file mode 100644 index 0000000..bb303ee --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html @@ -0,0 +1,79 @@ + + +$.jqplot.CanvasAxisTickRenderer + + + + + + + + + +

Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.  This renderer uses a separate rendering engine to draw the text on the canvas.  Two modes of rendering the text are available.  If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.  You do so by setting the “enableFontSupport” option to true.

Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.  Even if the “enableFontSupport” option is true non-supporting browsers will still render with the Hershey font.

Summary
$.jqplot.CanvasAxisTickRendererRenderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.
Properties
marktick mark on the axis.
showMarkwether or not to show the mark on the axis.
showGridlinewether or not to draw the gridline on the grid at this tick.
isMinorTickif this is a minor tick.
angleangle of text, measured clockwise from x axis.
markSizeLength of the tick marks in pixels.
showwether or not to show the tick (mark and label).
showLabelwether or not to show the label.
labelPosition‘auto’, ‘start’, ‘middle’ or ‘end’.
formatterA class of a formatter for the tick text.
formatStringstring passed to the formatter.
prefixString to prepend to the tick label.
fontFamilycss spec for the font-family css attribute.
fontSizeCSS spec for font size.
fontWeightCSS spec for fontWeight
fontStretchMultiplier to condense or expand font width.
textColorcss spec for the color attribute.
enableFontSupporttrue to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
pt2pxPoint to pixel scaling factor, used for computing height of bounding box around a label.
+ +

Properties

+ +

mark

this.mark = 'outside'

tick mark on the axis.  One of ‘inside’, ‘outside’, ‘cross’, ‘’ or null.

+ +

showMark

this.showMark = true

wether or not to show the mark on the axis.

+ +

showGridline

this.showGridline = true

wether or not to draw the gridline on the grid at this tick.

+ +

isMinorTick

this.isMinorTick = false

if this is a minor tick.

+ +

angle

this.angle = 0

angle of text, measured clockwise from x axis.

+ +

markSize

this.markSize = 4

Length of the tick marks in pixels.  For ‘cross’ style, length will be stoked above and below axis, so total length will be twice this.

+ +

show

this.show = true

wether or not to show the tick (mark and label).

+ +

showLabel

this.showLabel = true

wether or not to show the label.

+ +

labelPosition

this.labelPosition = 'auto'

’auto’, ‘start’, ‘middle’ or ‘end’.  Whether tick label should be positioned so the start, middle, or end of the tick mark.

+ +

formatter

this.formatter = $.jqplot.DefaultTickFormatter

A class of a formatter for the tick text.  The default $.jqplot.DefaultTickFormatter uses sprintf.

+ +

formatString

this.formatString = ''

string passed to the formatter.

+ +

prefix

this.prefix = ''

String to prepend to the tick label.  Prefix is prepended to the formatted tick label.

+ +

fontFamily

this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'

css spec for the font-family css attribute.

+ +

fontSize

this.fontSize = '10pt'

CSS spec for font size.

+ +

fontWeight

this.fontWeight = 'normal'

CSS spec for fontWeight

+ +

fontStretch

this.fontStretch = 1.0

Multiplier to condense or expand font width.  Applies only to browsers which don’t support canvas native font rendering.

+ +

textColor

this.textColor = '#666666'

css spec for the color attribute.

+ +

enableFontSupport

this.enableFontSupport = true

true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.  If true, tick label will be drawn with canvas tag native support for fonts.  If false, tick label will be drawn with Hershey font metrics.

+ +

pt2px

this.pt2px = null

Point to pixel scaling factor, used for computing height of bounding box around a label.  The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.  Leave as null to use default.  If tops of letters appear clipped, increase this.  If bounding box seems too big, decrease.  This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.

+ +
+ + + + + + + + + + +
this.mark = 'outside'
tick mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.isMinorTick = false
if this is a minor tick.
this.angle = 0
angle of text, measured clockwise from x axis.
this.markSize = 4
Length of the tick marks in pixels.
this.show = true
wether or not to show the tick (mark and label).
this.showLabel = true
wether or not to show the label.
this.labelPosition = 'auto'
‘auto’, ‘start’, ‘middle’ or ‘end’.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatString = ''
string passed to the formatter.
this.prefix = ''
String to prepend to the tick label.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
css spec for the font-family css attribute.
this.fontSize = '10pt'
CSS spec for font size.
this.fontWeight = 'normal'
CSS spec for fontWeight
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.textColor = '#666666'
css spec for the color attribute.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html new file mode 100644 index 0000000..d5998a1 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html @@ -0,0 +1,113 @@ + + +$.jqplot.CanvasOverlay + + + + + + + + + +
Summary
$.jqplot.CanvasOverlay
Properties
objects
nameOptional name for the overlay object.
showtrue to show (draw), false to not draw.
lineWidthWidth of the line.
lineCapType of ending placed on the line [‘round’, ‘butt’, ‘square’]
colorcolor of the line
shadowwether or not to draw a shadow on the line
shadowAngleShadow angle in degrees
shadowOffsetShadow offset from line in pixels
shadowDepthNumber of times shadow is stroked, each stroke offset shadowOffset from the last.
shadowAlphaAlpha channel transparency of shadow.
xaxisX axis to use for positioning/scaling the line.
yaxisY axis to use for positioning/scaling the line.
showTooltipShow a tooltip with data point values.
showTooltipPrecisionControls how close to line cursor must be to show tooltip.
tooltipLocationWhere to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
fadeTooltiptrue = fade in/out tooltip, flase = show/hide tooltip
tooltipFadeSpeed‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipOffsetPixel offset of tooltip from the highlight.
tooltipFormatStringFormat string passed the x and y values of the cursor on the line.
LineA straight line.
Properties
start[x, y] coordinates for the start of the line.
stop[x, y] coordinates for the end of the line.
HorizontalLineA straight horizontal line.
Properties
yy value to position the line
xminx value for the start of the line, null to scale to axis min.
xmaxx value for the end of the line, null to scale to axis max.
DashedHorizontalLineA straight dashed horizontal line.
Properties
dashPatternArray of line, space settings in pixels.
VerticalLineA straight vertical line.
DashedVerticalLineA straight dashed vertical line.
Properties
dashPatternArray of line, space settings in pixels.
+ +

Properties

+ +

objects

this.objects = []
+ +

name

Optional name for the overlay object.  Can be later used to retrieve the object by name.

+ +

show

true to show (draw), false to not draw.

+ +

lineWidth

Width of the line.

+ +

lineCap

Type of ending placed on the line [‘round’, ‘butt’, ‘square’]

+ +

color

color of the line

+ +

shadow

wether or not to draw a shadow on the line

+ +

shadowAngle

Shadow angle in degrees

+ +

shadowOffset

Shadow offset from line in pixels

+ +

shadowDepth

Number of times shadow is stroked, each stroke offset shadowOffset from the last.

+ +

shadowAlpha

Alpha channel transparency of shadow.  0 = transparent.

+ +

xaxis

X axis to use for positioning/scaling the line.

+ +

yaxis

Y axis to use for positioning/scaling the line.

+ +

showTooltip

Show a tooltip with data point values.

+ +

showTooltipPrecision

Controls how close to line cursor must be to show tooltip.  Higher number = closer to line, lower number = farther from line.  1.0 = cursor must be over line.

+ +

tooltipLocation

Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

+ +

fadeTooltip

true = fade in/out tooltip, flase = show/hide tooltip

+ +

tooltipFadeSpeed

’slow’, ‘def’, ‘fast’, or number of milliseconds.

+ +

tooltipOffset

Pixel offset of tooltip from the highlight.

+ +

tooltipFormatString

tooltipFormatString: '%d, %d' }

Format string passed the x and y values of the cursor on the line. e.g., ‘Dogs: %.2f, Cats: %d’.

+ +

Line

A straight line.

Summary
Properties
start[x, y] coordinates for the start of the line.
stop[x, y] coordinates for the end of the line.
+ +

Properties

+ +

start

[x, y] coordinates for the start of the line.

+ +

stop

stop: [] }

[x, y] coordinates for the end of the line.

+ +

HorizontalLine

A straight horizontal line.

Summary
Properties
yy value to position the line
xminx value for the start of the line, null to scale to axis min.
xmaxx value for the end of the line, null to scale to axis max.
+ +

Properties

+ +

y

y value to position the line

+ +

xmin

x value for the start of the line, null to scale to axis min.

+ +

xmax

x value for the end of the line, null to scale to axis max.

+ +

DashedHorizontalLine

A straight dashed horizontal line.

Summary
Properties
dashPatternArray of line, space settings in pixels.
+ +

Properties

+ +

dashPattern

dashPattern: [8,8] }

Array of line, space settings in pixels.  Default is 8 pixel of line, 8 pixel of space.  Note, limit to a 2 element array b/c of bug with higher order arrays.

+ +

VerticalLine

A straight vertical line.

+ +

DashedVerticalLine

A straight dashed vertical line.

Summary
Properties
dashPatternArray of line, space settings in pixels.
+ +

Properties

+ +

dashPattern

dashPattern: [8,8] }

Array of line, space settings in pixels.  Default is 8 pixel of line, 8 pixel of space.  Note, limit to a 2 element array b/c of bug with higher order arrays.

+ +
+ + + + + + + + + + +
this.objects = []
tooltipFormatString: '%d, %d' }
Format string passed the x and y values of the cursor on the line.
stop: [] }
[x, y] coordinates for the end of the line.
dashPattern: [8,8] }
Array of line, space settings in pixels.
dashPattern: [8,8] }
Array of line, space settings in pixels.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html new file mode 100644 index 0000000..993845a --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html @@ -0,0 +1,46 @@ + + +$.jqplot.CategoryAxisRenderer + + + + + + + + + +

A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.

To use this renderer, include the plugin in your source

<script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script>

and supply the appropriate options to your plot

{axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}
Summary
$.jqplot.CategoryAxisRendererA plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
Properties
sortMergedLabelsTrue to sort tick labels when labels are created by merging x axis values from multiple series.
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
+ +

Properties

+ +

sortMergedLabels

this.sortMergedLabels = false

True to sort tick labels when labels are created by merging x axis values from multiple series.  That is, say you have two series like:

line1 = [[2006, 4],            [2008, 9], [2009, 16]];
+line2 = [[2006, 3], [2007, 7], [2008, 6]];

If no label array is specified, tick labels will be collected from the x values of the series.  With sortMergedLabels set to true, tick labels will be:

[2006, 2007, 2008, 2009]

With sortMergedLabels set to false, tick labels will be:

[2006, 2008, 2009, 2007]

Note, this property is specified on the renderOptions for the axes when creating a plot:

axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}
+ +

tickRenderer

A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;

+ +
+ + + + + + + + + + +
this.sortMergedLabels = false
True to sort tick labels when labels are created by merging x axis values from multiple series.
A “tick” object showing the value of a tick/gridline on the plot.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-ciParser-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-ciParser-js.html new file mode 100644 index 0000000..de2638a --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-ciParser-js.html @@ -0,0 +1,39 @@ + + +$.jqplot.ciParser + + + + + + + + + +

Data Renderer function which converts a custom JSON data object into jqPlot data format.  Set this as a callable on the jqplot dataRenderer plot option:

plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... });

Where data is an object in JSON format or a JSON encoded string conforming to the City Index API spec.

Note that calling the renderer function is handled internally by jqPlot.  The user does not have to call the function.  The parameters described below will automatically be passed to the ciParser function.

Parameters

dataJSON encoded string or object.
plotreference to jqPlot Plot object.

Returns

data array in jqPlot format.

+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-cursor-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-cursor-js.html new file mode 100644 index 0000000..1bfe328 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-cursor-js.html @@ -0,0 +1,93 @@ + + +$.jqplot.Cursor + + + + + + + + + +

Plugin class representing the cursor as displayed on the plot.

Summary
$.jqplot.CursorPlugin class representing the cursor as displayed on the plot.
Properties
styleCSS spec for cursor style
showwether to show the cursor or not.
showTooltipshow a cursor position tooltip.
followMouseTooltip follows the mouse, it is not at a fixed location.
tooltipLocationWhere to position tooltip.
tooltipOffsetPixel offset of tooltip from the grid boudaries or cursor center.
showTooltipGridPositionshow the grid pixel coordinates of the mouse.
showTooltipUnitPositionshow the unit (data) coordinates of the mouse.
showTooltipDataPositionUsed with showVerticalLine to show intersecting data points in the tooltip.
tooltipFormatStringsprintf format string for the tooltip.
useAxesFormattersUse the x and y axes formatters to format the text in the tooltip.
tooltipAxisGroupsShow position for the specified axes.
zoomEnable plot zooming.
looseZoomWill expand zoom range to provide more rounded tick values.
clickResetWill reset plot zoom if single click on plot without drag.
dblClickResetWill reset plot zoom if double click on plot without drag.
showVerticalLinedraw a vertical line across the plot which follows the cursor.
showHorizontalLinedraw a horizontal line across the plot which follows the cursor.
constrainZoomTo‘none’, ‘x’ or ‘y’
intersectionThresholdpixel distance from data point or marker to consider cursor lines intersecting with point.
showCursorLegendReplace the plot legend with an enhanced legend displaying intersection information.
cursorLegendFormatStringFormat string used in the cursor legend.
constrainOutsideZoomTrue to limit actual zoom area to edges of grid, even when zooming outside of plot area.
showTooltipOutsideZoomTrue will keep updating the tooltip when zooming of the grid.
methods
$.jqplot.Cursor.zoomProxylinks targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
+ +

Properties

+ +

style

this.style = 'crosshair'

CSS spec for cursor style

+ +

show

this.show = $.jqplot.config.enablePlugins

wether to show the cursor or not.

+ +

showTooltip

this.showTooltip = true

show a cursor position tooltip.  Location of the tooltip will be controlled by followMouse and tooltipLocation.

+ +

followMouse

this.followMouse = false

Tooltip follows the mouse, it is not at a fixed location.  Tooltip will show on the grid at the location given by tooltipLocation, offset from the grid edge by tooltipOffset.

+ +

tooltipLocation

this.tooltipLocation = 'se'

Where to position tooltip.  If followMouse is true, this is relative to the cursor, otherwise, it is relative to the grid.  One of ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

+ +

tooltipOffset

this.tooltipOffset = 6

Pixel offset of tooltip from the grid boudaries or cursor center.

+ +

showTooltipGridPosition

this.showTooltipGridPosition = false

show the grid pixel coordinates of the mouse.

+ +

showTooltipUnitPosition

this.showTooltipUnitPosition = true

show the unit (data) coordinates of the mouse.

+ +

showTooltipDataPosition

this.showTooltipDataPosition = false

Used with showVerticalLine to show intersecting data points in the tooltip.

+ +

tooltipFormatString

this.tooltipFormatString = '%.4P, %.4P'

sprintf format string for the tooltip.  Uses Ash Searle’s javascript sprintf implementation found here: http://hexmen.com/blog/2007/03/printf-sprintf/ See http://perldoc.perl.org/functions/sprintf.html for reference Note, if showTooltipDataPosition is true, the default tooltipFormatString will be set to the cursorLegendFormatString, not the default given here.

+ +

useAxesFormatters

this.useAxesFormatters = true

Use the x and y axes formatters to format the text in the tooltip.

+ +

tooltipAxisGroups

this.tooltipAxisGroups = []

Show position for the specified axes.  This is an array like [[‘xaxis’, ‘yaxis’], [‘xaxis’, ‘y2axis’]] Default is to compute automatically for all visible axes.

+ +

zoom

this.zoom = false

Enable plot zooming.

+ +

looseZoom

this.looseZoom = true

Will expand zoom range to provide more rounded tick values.  Works only with linear, log and date axes.

+ +

clickReset

this.clickReset = false

Will reset plot zoom if single click on plot without drag.

+ +

dblClickReset

this.dblClickReset = true

Will reset plot zoom if double click on plot without drag.

+ +

showVerticalLine

this.showVerticalLine = false

draw a vertical line across the plot which follows the cursor.  When the line is near a data point, a special legend and/or tooltip can be updated with the data values.

+ +

showHorizontalLine

this.showHorizontalLine = false

draw a horizontal line across the plot which follows the cursor.

+ +

constrainZoomTo

this.constrainZoomTo = 'none'

’none’, ‘x’ or ‘y’

+ +

intersectionThreshold

this.intersectionThreshold = 2

pixel distance from data point or marker to consider cursor lines intersecting with point.  If data point markers are not shown, this should be >= 1 or will often miss point intersections.

+ +

showCursorLegend

this.showCursorLegend = false

Replace the plot legend with an enhanced legend displaying intersection information.

+ +

cursorLegendFormatString

this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString

Format string used in the cursor legend.  If showTooltipDataPosition is true, this will also be the default format string used by tooltipFormatString.

+ +

constrainOutsideZoom

this.constrainOutsideZoom = true

True to limit actual zoom area to edges of grid, even when zooming outside of plot area.  That is, can’t zoom out by mousing outside plot.

+ +

showTooltipOutsideZoom

this.showTooltipOutsideZoom = false

True will keep updating the tooltip when zooming of the grid.

+ +

methods

+ +

$.jqplot.Cursor.zoomProxy

$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)

links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. controllerPlot will not actually zoom, but acts as an overview plot.  Note, the zoom options must be set to true for zoomProxy to work.

+ +
+ + + + + + + + + + +
this.style = 'crosshair'
CSS spec for cursor style
this.show = $.jqplot.config.enablePlugins
wether to show the cursor or not.
this.showTooltip = true
show a cursor position tooltip.
this.followMouse = false
Tooltip follows the mouse, it is not at a fixed location.
this.tooltipLocation = 'se'
Where to position tooltip.
this.tooltipOffset = 6
Pixel offset of tooltip from the grid boudaries or cursor center.
this.showTooltipGridPosition = false
show the grid pixel coordinates of the mouse.
this.showTooltipUnitPosition = true
show the unit (data) coordinates of the mouse.
this.showTooltipDataPosition = false
Used with showVerticalLine to show intersecting data points in the tooltip.
this.tooltipFormatString = '%.4P, %.4P'
sprintf format string for the tooltip.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.tooltipAxisGroups = []
Show position for the specified axes.
this.zoom = false
Enable plot zooming.
this.looseZoom = true
Will expand zoom range to provide more rounded tick values.
this.clickReset = false
Will reset plot zoom if single click on plot without drag.
this.dblClickReset = true
Will reset plot zoom if double click on plot without drag.
this.showVerticalLine = false
draw a vertical line across the plot which follows the cursor.
this.showHorizontalLine = false
draw a horizontal line across the plot which follows the cursor.
this.constrainZoomTo = 'none'
‘none’, ‘x’ or ‘y’
this.intersectionThreshold = 2
pixel distance from data point or marker to consider cursor lines intersecting with point.
this.showCursorLegend = false
Replace the plot legend with an enhanced legend displaying intersection information.
this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString
Format string used in the cursor legend.
this.constrainOutsideZoom = true
True to limit actual zoom area to edges of grid, even when zooming outside of plot area.
this.showTooltipOutsideZoom = false
True will keep updating the tooltip when zooming of the grid.
$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)
links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html new file mode 100644 index 0000000..f87d827 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html @@ -0,0 +1,101 @@ + + +$.jqplot.DateAxisRenderer + + + + + + + + + +

A plugin for a jqPlot to render an axis as a series of date values.  This renderer has no options beyond those supplied by the Axis class.  It supplies it’s own tick formatter, so the tickOptions.formatter option should not be overridden.

Thanks to Ken Synder for his enhanced Date instance methods which are included with this code http://kendsnyder.com/sandbox/date/.

To use this renderer, include the plugin in your source

<script type="text/javascript" language="javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>

and supply the appropriate options to your plot

{axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}

Dates can be passed into the axis in almost any recognizable value and will be parsed.  They will be rendered on the axis in the format specified by tickOptions.formatString.  e.g. tickOptions.formatString = ‘%Y-%m-%d’.

Accecptable format codes are:

Code    Result                  Description
+            == Years ==
+%Y      2008                Four-digit year
+%y      08                  Two-digit year
+            == Months ==
+%m      09                  Two-digit month
+%#m     9                   One or two-digit month
+%B      September           Full month name
+%b      Sep                 Abbreviated month name
+            == Days ==
+%d      05                  Two-digit day of month
+%#d     5                   One or two-digit day of month
+%e      5                   One or two-digit day of month
+%A      Sunday              Full name of the day of the week
+%a      Sun                 Abbreviated name of the day of the week
+%w      0                   Number of the day of the week (0 = Sunday, 6 = Saturday)
+%o      th                  The ordinal suffix string following the day of the month
+            == Hours ==
+%H      23                  Hours in 24-hour format (two digits)
+%#H     3                   Hours in 24-hour integer format (one or two digits)
+%I      11                  Hours in 12-hour format (two digits)
+%#I     3                   Hours in 12-hour integer format (one or two digits)
+%p      PM                  AM or PM
+            == Minutes ==
+%M      09                  Minutes (two digits)
+%#M     9                   Minutes (one or two digits)
+            == Seconds ==
+%S      02                  Seconds (two digits)
+%#S     2                   Seconds (one or two digits)
+%s      1206567625723       Unix timestamp (Seconds past 1970-01-01 00:00:00)
+            == Milliseconds ==
+%N      008                 Milliseconds (three digits)
+%#N     8                   Milliseconds (one to three digits)
+            == Timezone ==
+%O      360                 difference in minutes between local time and GMT
+%Z      Mountain Standard Time  Name of timezone as reported by browser
+%G      -06:00              Hours and minutes between GMT
+            == Shortcuts ==
+%F      2008-03-26          %Y-%m-%d
+%T      05:06:30            %H:%M:%S
+%X      05:06:30            %H:%M:%S
+%x      03/26/08            %m/%d/%y
+%D      03/26/08            %m/%d/%y
+%#c     Wed Mar 26 15:31:00 2008  %a %b %e %H:%M:%S %Y
+%v      3-Sep-2008          %e-%b-%Y
+%R      15:31               %H:%M
+%r      3:31:00 PM          %I:%M:%S %p
+            == Characters ==
+%n      \n                  Newline
+%t      \t                  Tab
+%%      %                   Percent Symbol
Summary
$.jqplot.DateAxisRendererA plugin for a jqPlot to render an axis as a series of date values.
Properties
tickRendererA class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
tickInsetControls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
drawBaselineTrue to draw the axis baseline.
baselineWidthwidth of the baseline in pixels.
baselineColorCSS color spec for the baseline.
+ +

Properties

+ +

tickRenderer

A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;

+ +

tickInset

this.tickInset = 0

Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.  0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.

+ +

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

+ +

baselineWidth

this.baselineWidth = null

width of the baseline in pixels.

+ +

baselineColor

this.baselineColor = null

CSS color spec for the baseline.

+ +
+ + + + + + + + + + +
A “tick” object showing the value of a tick/gridline on the plot.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.drawBaseline = true
True to draw the axis baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineColor = null
CSS color spec for the baseline.
An individual axis object.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html new file mode 100644 index 0000000..a45f022 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html @@ -0,0 +1,98 @@ + + +$.jqplot.DonutRenderer + + + + + + + + + +

Plugin renderer to draw a donut chart. x values, if present, will be used as slice labels. y values give slice size.

To use this renderer, you need to include the donut renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.donutRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot2 = $.jqplot('chart2', [s1, s2], {
+    seriesDefaults: {
+        renderer:$.jqplot.DonutRenderer,
+        rendererOptions:{
+             sliceMargin: 2,
+             innerDiameter: 110,
+             startAngle: -90
+         }
+     }
+});

A donut plot will trigger events on the plot target according to user interaction.  All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.

’jqplotDataMouseOver’triggered when user mouseing over a slice.
’jqplotDataHighlight’triggered the first time user mouses over a slice, if highlighting is enabled.
’jqplotDataUnhighlight’triggered when a user moves the mouse out of a highlighted slice.
’jqplotDataClick’triggered when the user clicks on a slice.
’jqplotDataRightClick’tiggered when the user right clicks on a slice if the “captureRightClick” option is set to true on the plot.
Summary
$.jqplot.DonutRendererPlugin renderer to draw a donut chart.
Properties
diameterOuter diameter of the donut, auto computed by default
innerDiameterInner diameter of the donut, auto calculated by default.
thicknessthickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
paddingpadding between the donut and plot edges, legend, etc.
sliceMarginangular spacing between donut slices in degrees.
ringMarginpixel distance between rings, or multiple series in a donut plot.
filltrue or false, wether to fil the slices.
shadowOffsetoffset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a slice.
dataLabelsEither ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
showDataLabelstrue to show data labels on slices.
dataLabelFormatStringFormat string for data labels.
dataLabelThreshold
dataLabelPositionFactorA Multiplier (0-1) of the pie radius which controls position of label on slice.
dataLabelNudgeNumber of pixels to slide the label away from (+) or toward (-) the center of the pie.
startAngleAngle to start drawing donut in degrees.
$.jqplot.DonutLegendRendererLegend Renderer specific to donut plots.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

diameter

this.diameter = null

Outer diameter of the donut, auto computed by default

+ +

innerDiameter

this.innerDiameter = null

Inner diameter of the donut, auto calculated by default.  If specified will override thickness value.

+ +

thickness

this.thickness = null

thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.

+ +

padding

this.padding = 20

padding between the donut and plot edges, legend, etc.

+ +

sliceMargin

this.sliceMargin = 0

angular spacing between donut slices in degrees.

+ +

ringMargin

this.ringMargin = null

pixel distance between rings, or multiple series in a donut plot. null will compute ringMargin based on sliceMargin.

+ +

fill

this.fill = true

true or false, wether to fil the slices.

+ +

shadowOffset

this.shadowOffset = 2

offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.

+ +

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

+ +

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

+ +

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a slice.

+ +

dataLabels

this.dataLabels = 'percent'

Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.  Defaults to percentage of each pie slice.

+ +

showDataLabels

this.showDataLabels = false

true to show data labels on slices.

+ +

dataLabelFormatString

this.dataLabelFormatString = null

Format string for data labels.  If none, ‘%s’ is used for “label” and for arrays, ‘%d’ for value and ‘%d%%’ for percentage.

+ +

dataLabelThreshold

this.dataLabelThreshold = 3
Threshhold in percentage (0100) of pie area, below which no label will be displayed.  This applies to all label types, not just to percentage labels.
+ +

dataLabelPositionFactor

this.dataLabelPositionFactor = 0.4

A Multiplier (0-1) of the pie radius which controls position of label on slice.  Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.

+ +

dataLabelNudge

this.dataLabelNudge = 0

Number of pixels to slide the label away from (+) or toward (-) the center of the pie.

+ +

startAngle

this.startAngle = 0

Angle to start drawing donut in degrees.  According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.  90 = on the negaive y axis.  180 or - 180 = on the negative x axis.

+ +

$.jqplot.DonutLegendRenderer

Legend Renderer specific to donut plots.  Set by default when user creates a donut plot.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

+ +

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

+ +
+ + + + + + + + + + +
this.diameter = null
Outer diameter of the donut, auto computed by default
this.innerDiameter = null
Inner diameter of the donut, auto calculated by default.
this.thickness = null
thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
this.padding = 20
padding between the donut and plot edges, legend, etc.
this.sliceMargin = 0
angular spacing between donut slices in degrees.
this.ringMargin = null
pixel distance between rings, or multiple series in a donut plot.
this.fill = true
true or false, wether to fil the slices.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.showDataLabels = false
true to show data labels on slices.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelThreshold = 3
this.dataLabelPositionFactor = 0.4
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelNudge = 0
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.startAngle = 0
Angle to start drawing donut in degrees.
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-dragable-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-dragable-js.html new file mode 100644 index 0000000..3479e65 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-dragable-js.html @@ -0,0 +1,45 @@ + + +$.jqplot.Dragable + + + + + + + + + +

Plugin to make plotted points dragable by the user.

Summary
$.jqplot.DragablePlugin to make plotted points dragable by the user.
Properties
colorCSS color spec for the dragged point (and adjacent line segment or bar).
constrainToConstrain dragging motion to an axis or to none.
+ +

Properties

+ +

color

this.color

CSS color spec for the dragged point (and adjacent line segment or bar).

+ +

constrainTo

this.constrainTo = 'none'

Constrain dragging motion to an axis or to none.  Allowable values are ‘none’, ‘x’, ‘y’

+ +
+ + + + + + + + + + +
this.color
CSS color spec for the dragged point (and adjacent line segment or bar).
this.constrainTo = 'none'
Constrain dragging motion to an axis or to none.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html new file mode 100644 index 0000000..b5f5d10 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html @@ -0,0 +1,51 @@ + + +/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.enhancedLegendRenderer.js + + + + + + + + + +
Summary
jqplot.enhancedLegendRenderer.js
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
seriesTogglefalse to not enable series on/off toggling on the legend.
seriesToggleReplotTrue to replot the chart after toggling series on/off.
disableIEFadingtrue to toggle series with a show/hide method only and not allow fading in/out.
+ +

Properties

+ +

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

+ +

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

+ +

seriesToggle

this.seriesToggle = 'normal'

false to not enable series on/off toggling on the legend. true or a fadein/fadeout speed (number of milliseconds or ‘fast’, ‘normal’, ‘slow’) to enable show/hide of series on click of legend item.

+ +

seriesToggleReplot

this.seriesToggleReplot = false

True to replot the chart after toggling series on/off.  This will set the series show property to false.  This allows for rescaling or other maniplation of chart.  Set to an options object (e.g.  {resetAxes: true}) for replot options.

+ +

disableIEFading

this.disableIEFading = true

true to toggle series with a show/hide method only and not allow fading in/out.  This is to overcome poor performance of fade in some versions of IE.

+ +
+ + + + + + + + + + +
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.seriesToggle = 'normal'
false to not enable series on/off toggling on the legend.
this.seriesToggleReplot = false
True to replot the chart after toggling series on/off.
this.disableIEFading = true
true to toggle series with a show/hide method only and not allow fading in/out.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html new file mode 100644 index 0000000..17d2cf5 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html @@ -0,0 +1,87 @@ + + +$.jqplot.FunnelRenderer + + + + + + + + + +

Plugin renderer to draw a funnel chart. x values, if present, will be used as labels. y values give area size.

Funnel charts will draw a single series only.

To use this renderer, you need to include the funnel renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.funnelRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot2 = $.jqplot('chart2', [s1, s2], {
+    seriesDefaults: {
+        renderer:$.jqplot.FunnelRenderer,
+        rendererOptions:{
+             sectionMargin: 12,
+             widthRatio: 0.3
+         }
+     }
+});

IMPORTANT

The funnel renderer will reorder data in descending order so the largest value in the data set is first and displayed on top of the funnel.  Data will then be displayed in descending order down the funnel.  The area of each funnel section will correspond to the value of each data point relative to the sum of all values.  That is section area is proportional to section value divided by sum of all section values.

If your data is not in descending order when passed into the plot, it will be reordered when stored in the series.data property.  A copy of the unordered data is kept in the series._unorderedData property.

A funnel plot will trigger events on the plot target according to user interaction.  All events return the event object, the series index, the point (section) index, and the point data for the appropriate section.  Note the point index will referr to the ordered data, not the original unordered data.

’jqplotDataMouseOver’triggered when mousing over a section.
’jqplotDataHighlight’triggered the first time user mouses over a section, if highlighting is enabled.
’jqplotDataUnhighlight’triggered when a user moves the mouse out of a highlighted section.
’jqplotDataClick’triggered when the user clicks on a section.
’jqplotDataRightClick’tiggered when the user right clicks on a section if the “captureRightClick” option is set to true on the plot.
Summary
$.jqplot.FunnelRendererPlugin renderer to draw a funnel chart.
Properties
paddingpadding between the funnel and plot edges, legend, etc.
sectionMarginspacing between funnel sections in pixels.
filltrue or false, wether to fill the areas.
shadowOffsetoffset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
highlightMouseOverTrue to highlight area when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a area.
highlightColorsarray of colors to use when highlighting an area.
widthRatioThe ratio of the width of the top of the funnel to the bottom.
lineWidthwidth of line if areas are stroked and not filled.
dataLabelsEither ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
showDataLabelstrue to show data labels on slices.
dataLabelFormatStringFormat string for data labels.
dataLabelThreshold
$.jqplot.FunnelLegendRendererLegend Renderer specific to funnel plots.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

padding

this.padding = {top: 20, right: 20, bottom: 20, left: 20}

padding between the funnel and plot edges, legend, etc.

+ +

sectionMargin

this.sectionMargin = 6

spacing between funnel sections in pixels.

+ +

fill

this.fill = true

true or false, wether to fill the areas.

+ +

shadowOffset

this.shadowOffset = 2

offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.

+ +

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

+ +

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight area when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a area.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a area.  This will be disabled if highlightMouseOver is true.

+ +

highlightColors

this.highlightColors = []

array of colors to use when highlighting an area.

+ +

widthRatio

this.widthRatio = 0.2

The ratio of the width of the top of the funnel to the bottom. a ratio of 0 will make an upside down pyramid.

+ +

lineWidth

this.lineWidth = 2

width of line if areas are stroked and not filled.

+ +

dataLabels

this.dataLabels = 'percent'

Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.  Defaults to percentage of each pie slice.

+ +

showDataLabels

this.showDataLabels = false

true to show data labels on slices.

+ +

dataLabelFormatString

this.dataLabelFormatString = null

Format string for data labels.  If none, ‘%s’ is used for “label” and for arrays, ‘%d’ for value and ‘%d%%’ for percentage.

+ +

dataLabelThreshold

this.dataLabelThreshold = 3
Threshhold in percentage (0100) of pie area, below which no label will be displayed.  This applies to all label types, not just to percentage labels.
+ +

$.jqplot.FunnelLegendRenderer

Legend Renderer specific to funnel plots.  Set by default when the user creates a funnel plot.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

+ +

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

+ +
+ + + + + + + + + + +
this.padding = {top: 20, right: 20, bottom: 20, left: 20}
padding between the funnel and plot edges, legend, etc.
this.sectionMargin = 6
spacing between funnel sections in pixels.
this.fill = true
true or false, wether to fill the areas.
this.shadowOffset = 2
offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.highlightMouseOver = true
True to highlight area when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a area.
this.highlightColors = []
array of colors to use when highlighting an area.
this.widthRatio = 0.2
The ratio of the width of the top of the funnel to the bottom.
this.lineWidth = 2
width of line if areas are stroked and not filled.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.showDataLabels = false
true to show data labels on slices.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelThreshold = 3
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-highlighter-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-highlighter-js.html new file mode 100644 index 0000000..daa8806 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-highlighter-js.html @@ -0,0 +1,80 @@ + + +$.jqplot.Highlighter + + + + + + + + + +

Plugin which will highlight data points when they are moused over.

To use this plugin, include the js file in your source:

<script type="text/javascript" src="plugins/jqplot.highlighter.js"></script>

A tooltip providing information about the data point is enabled by default.  To disable the tooltip, set “showTooltip” to false.

You can control what data is displayed in the tooltip with various options.  The “tooltipAxes” option controls wether the x, y or both data values are displayed.

Some chart types (e.g. hi-low-close) have more than one y value per data point.  To display the additional values in the tooltip, set the “yvalues” option to the desired number of y values present (3 for a hlc chart).

By default, data values will be formatted with the same formatting specifiers as used to format the axis ticks.  A custom format code can be supplied with the tooltipFormatString option.  This will apply to all values in the tooltip.

For more complete control, the “formatString” option can be set.  This Allows conplete control over tooltip formatting.  Values are passed to the format string in an order determined by the “tooltipAxes” and “yvalues” options.  So, if you have a hi-low-close chart and you just want to display the hi-low-close values in the tooltip, you could set a formatString like:

highlighter: {
+    tooltipAxes: 'y',
+    yvalues: 3,
+    formatString:'<table class="jqplot-highlighter">
+        <tr><td>hi:</td><td>%s</td></tr>
+        <tr><td>low:</td><td>%s</td></tr>
+        <tr><td>close:</td><td>%s</td></tr></table>'
+}
Summary
$.jqplot.HighlighterPlugin which will highlight data points when they are moused over.
Properties
showtrue to show the highlight.
markerRendererRenderer used to draw the marker of the highlighted point.
showMarkertrue to show the marker
lineWidthAdjustPixels to add to the lineWidth of the highlight.
sizeAdjustPixels to add to the overall size of the highlight.
showTooltipShow a tooltip with data point values.
tooltipLocationWhere to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
fadeTooltiptrue = fade in/out tooltip, flase = show/hide tooltip
tooltipFadeSpeed‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipOffsetPixel offset of tooltip from the highlight.
tooltipAxesWhich axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
useAxesFormattersUse the x and y axes formatters to format the text in the tooltip.
tooltipFormatStringsprintf format string for the tooltip.
formatStringalternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
yvaluesNumber of y values to expect in the data point array.
bringSeriesToFrontThis option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
+ +

Properties

+ +

show

this.show = $.jqplot.config.enablePlugins

true to show the highlight.

+ +

markerRenderer

this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})

Renderer used to draw the marker of the highlighted point.  Renderer will assimilate attributes from the data point being highlighted, so no attributes need set on the renderer directly.  Default is to turn off shadow drawing on the highlighted point.

+ +

showMarker

this.showMarker = true

true to show the marker

+ +

lineWidthAdjust

this.lineWidthAdjust = 2.5

Pixels to add to the lineWidth of the highlight.

+ +

sizeAdjust

this.sizeAdjust = 5

Pixels to add to the overall size of the highlight.

+ +

showTooltip

this.showTooltip = true

Show a tooltip with data point values.

+ +

tooltipLocation

this.tooltipLocation = 'nw'

Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

+ +

fadeTooltip

this.fadeTooltip = true

true = fade in/out tooltip, flase = show/hide tooltip

+ +

tooltipFadeSpeed

this.tooltipFadeSpeed = "fast"

’slow’, ‘def’, ‘fast’, or number of milliseconds.

+ +

tooltipOffset

this.tooltipOffset = 2

Pixel offset of tooltip from the highlight.

+ +

tooltipAxes

this.tooltipAxes = 'both'

Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.

+ +

useAxesFormatters

this.useAxesFormatters = true

Use the x and y axes formatters to format the text in the tooltip.

+ +

tooltipFormatString

this.tooltipFormatString = '%.5P'

sprintf format string for the tooltip.  Uses Ash Searle’s javascript sprintf implementation found here: http://hexmen.com/blog/2007/03/printf-sprintf/ See http://perldoc.perl.org/functions/sprintf.html for reference.  Additional “p” and “P” format specifiers added by Chris Leonello.

+ +

formatString

this.formatString = null

alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.  So, you could have a tooltip like: ‘Date: %s, number of cats: %d’ to format the whole tooltip at one go.  If useAxesFormatters is true, values will be formatted according to Axes formatters and you can populate your tooltip string with %s placeholders.

+ +

yvalues

this.yvalues = 1

Number of y values to expect in the data point array.  Typically this is 1.  Certain plots, like OHLC, will have more y values in each data point array.

+ +

bringSeriesToFront

this.bringSeriesToFront = false

This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.

+ +
+ + + + + + + + + + +
this.show = $.jqplot.config.enablePlugins
true to show the highlight.
this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})
Renderer used to draw the marker of the highlighted point.
this.showMarker = true
true to show the marker
this.lineWidthAdjust = 2.5
Pixels to add to the lineWidth of the highlight.
this.sizeAdjust = 5
Pixels to add to the overall size of the highlight.
this.showTooltip = true
Show a tooltip with data point values.
this.tooltipLocation = 'nw'
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
this.fadeTooltip = true
true = fade in/out tooltip, flase = show/hide tooltip
this.tooltipFadeSpeed = "fast"
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
this.tooltipOffset = 2
Pixel offset of tooltip from the highlight.
this.tooltipAxes = 'both'
Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.tooltipFormatString = '%.5P'
sprintf format string for the tooltip.
this.formatString = null
alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
this.yvalues = 1
Number of y values to expect in the data point array.
this.bringSeriesToFront = false
This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html new file mode 100644 index 0000000..4e7317e --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html @@ -0,0 +1,47 @@ + + +$.jqplot.LogAxisRenderer + + + + + + + + + +

A plugin for a jqPlot to render a logarithmic axis.

To use this renderer, include the plugin in your source

<script type="text/javascript" language="javascript" src="plugins/jqplot.logAxisRenderer.js"></script>

and supply the appropriate options to your plot

{axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}
Summary
$.jqplot.LogAxisRendererA plugin for a jqPlot to render a logarithmic axis.
axisDefaultsDefault properties which will be applied directly to the series.
PropertiesProperties
drawBaselineTrue to draw the axis baseline.
minorTicksNumber of ticks to add between “major” ticks.
+ +

axisDefaults

Default properties which will be applied directly to the series.

+ +

Properties

Properties

basethe logarithmic base, commonly 2, 10 or Math.E
tickDistributionDeprecated.  “power” distribution of ticks always used.  Option has no effect.
+ +

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

+ +

minorTicks

this.minorTicks = 'auto'

Number of ticks to add between “major” ticks.  Major ticks are ticks supplied by user or auto computed.  Minor ticks cannot be created by user.

+ +
+ + + + + + + + + + +
this.drawBaseline = true
True to draw the axis baseline.
this.minorTicks = 'auto'
Number of ticks to add between “major” ticks.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html new file mode 100644 index 0000000..4dfef14 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html @@ -0,0 +1,49 @@ + + +$.jqplot.MekkoAxisRenderer + + + + + + + + + +

An axis renderer for a Mekko chart.  Should be used with a Mekko chart where the mekkoRenderer is used on the series.  Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick for each series scaled to the sum of all the y values.

Summary
$.jqplot.MekkoAxisRendererAn axis renderer for a Mekko chart.
Properties
tickModeHow to space the ticks on the axis.
barLabelRendererrenderer to use to draw labels under each bar.
barLabelsarray of labels to put under each bar.
barLabelOptionsoptions object to pass to the bar label renderer.
+ +

Properties

+ +

tickMode

this.tickMode

How to space the ticks on the axis.  ‘bar’ will place a tick at the width of each bar.  This is the default for the x axis.  ‘even’ will place ticks at even intervals.  This is the default for x2 axis and y axis.  y axis cannot be changed.

+ +

barLabelRenderer

this.barLabelRenderer = $.jqplot.AxisLabelRenderer

renderer to use to draw labels under each bar.

+ +

barLabels

this.barLabels = this.barLabels || []

array of labels to put under each bar.

+ +

barLabelOptions

this.barLabelOptions = {}

options object to pass to the bar label renderer.

+ +
+ + + + + + + + + + +
this.tickMode
How to space the ticks on the axis.
this.barLabelRenderer = $.jqplot.AxisLabelRenderer
renderer to use to draw labels under each bar.
this.barLabels = this.barLabels || []
array of labels to put under each bar.
this.barLabelOptions = {}
options object to pass to the bar label renderer.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html new file mode 100644 index 0000000..dbe7181 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html @@ -0,0 +1,62 @@ + + +$.jqplot.MekkoRenderer + + + + + + + + + +

Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. the $.jqplot.MekkoAxisRenderer should be used with mekko charts.  The mekko renderer overrides the default legend renderer with it’s own $.jqplot.MekkoLegendRenderer which allows more flexibility to specify number of rows and columns in the legend.

Data is specified per bar in the chart.  You can specify data as an array of y values, or as an array of [label, value] pairs.  Note that labels are used only on the first series.  Labels on subsequent series are ignored:

bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
+bar2 = [15,6,9,13,6];
+bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];

If you want to place labels for each bar under the axis, you use the barLabels option on the axes.  The bar labels can be styled with the “.jqplot-mekko-barLabel” css class.

barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
+axes:{xaxis:{barLabels:barLabels}}
Summary
$.jqplot.MekkoRendererDraws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
Properties
borderColorcolor of the borders between areas on the chart
showBordersTrue to draw borders lines between areas on the chart.
Functions
setGridDataconverts the user data values to grid coordinates and stores them in the gridData array.
makeGridDataconverts any arbitrary data values to grid coordinates and returns them.
$.jqplot.MekkoLegendRendererLegend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

borderColor

this.borderColor = null

color of the borders between areas on the chart

+ +

showBorders

this.showBorders = true

True to draw borders lines between areas on the chart.  False will draw borders lines with the same color as the area.

+ +

Functions

+ +

setGridData

$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)

converts the user data values to grid coordinates and stores them in the gridData array.  Will convert user data into appropriate rectangles.  Called with scope of a series.

+ +

makeGridData

$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)

converts any arbitrary data values to grid coordinates and returns them.  This method exists so that plugins can use a series’ linerenderer to generate grid data points without overwriting the grid data associated with that series.  Called with scope of a series.

+ +

$.jqplot.MekkoLegendRenderer

Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

+ +

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

+ +
+ + + + + + + + + + +
this.borderColor = null
color of the borders between areas on the chart
this.showBorders = true
True to draw borders lines between areas on the chart.
$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
An axis renderer for a Mekko chart.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html new file mode 100644 index 0000000..cce6835 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html @@ -0,0 +1,103 @@ + + +$.jqplot.MeterGaugeRenderer + + + + + + + + + +

Plugin renderer to draw a meter gauge chart.

Data consists of a single series with 1 data point to position the gauge needle.

To use this renderer, you need to include the meter gauge renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.meterGaugeRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot0 = $.jqplot('chart0',[[18]],{
+    title: 'Network Speed',
+    seriesDefaults: {
+        renderer: $.jqplot.MeterGaugeRenderer,
+        rendererOptions: {
+            label: 'MB/s'
+        }
+    }
+});

A meterGauge plot does not support events.

Summary
$.jqplot.MeterGaugeRendererPlugin renderer to draw a meter gauge chart.
Properties
diameterOuter diameter of the meterGauge, auto computed by default
paddingpadding between the meterGauge and plot edges, auto calculated by default.
shadowOffsetoffset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
backgroundbackground color of the inside of the gauge.
ringColorcolor of the outer ring, hub, and needle of the gauge.
tickColorcolor of the tick marks around the gauge.
ringWidthwidth of the ring around the gauge.
minMinimum value on the gauge.
maxMaximum value on the gauge.
ticksArray of tick values.
showTickstrue to show ticks around gauge.
showTickLabelstrue to show tick labels next to ticks.
labelA gauge label like ‘kph’ or ‘Volts’
labelHeightAdjustNumber of Pixels to offset the label up (-) or down (+) from its default position.
labelPositionWhere to position the label, either ‘inside’ or ‘bottom’.
intervalsArray of ranges to be drawn around the gauge.
intervalColorsArray of colors to use for the intervals.
intervalInnerRadiusRadius of the inner circle of the interval ring.
intervalOuterRadiusRadius of the outer circle of the interval ring.
tickSpacingDegrees between ticks.
hubRadiusRadius of the hub at the bottom center of gauge which the needle attaches to.
tickPaddingpadding of the tick marks to the outer ring and the tick labels to marks.
needleThicknessMaximum thickness the needle.
needlePadPadding between needle and inner edge of the ring when the needle is at the min or max gauge value.
pegNeedleTrue will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
+ +

Properties

+ +

diameter

this.diameter = null

Outer diameter of the meterGauge, auto computed by default

+ +

padding

this.padding = null

padding between the meterGauge and plot edges, auto calculated by default.

+ +

shadowOffset

this.shadowOffset = 2

offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.

+ +

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

+ +

shadowDepth

this.shadowDepth = 4

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

+ +

background

this.background = "#efefef"

background color of the inside of the gauge.

+ +

ringColor

this.ringColor = "#BBC6D0"

color of the outer ring, hub, and needle of the gauge.

+ +

tickColor

this.tickColor = "989898"

color of the tick marks around the gauge.

+ +

ringWidth

this.ringWidth = null

width of the ring around the gauge.  Auto computed by default.

+ +

min

this.min

Minimum value on the gauge.  Auto computed by default

+ +

max

this.max

Maximum value on the gauge.  Auto computed by default

+ +

ticks

this.ticks = []

Array of tick values.  Auto computed by default.

+ +

showTicks

this.showTicks = true

true to show ticks around gauge.

+ +

showTickLabels

this.showTickLabels = true

true to show tick labels next to ticks.

+ +

label

this.label = null

A gauge label like ‘kph’ or ‘Volts’

+ +

labelHeightAdjust

this.labelHeightAdjust = 0

Number of Pixels to offset the label up (-) or down (+) from its default position.

+ +

labelPosition

this.labelPosition = 'inside'

Where to position the label, either ‘inside’ or ‘bottom’.

+ +

intervals

this.intervals = []

Array of ranges to be drawn around the gauge.  Array of form:

[value1, value2, ...]

indicating the values for the first, second, ... intervals.

+ +

intervalColors

this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]

Array of colors to use for the intervals.

+ +

intervalInnerRadius

this.intervalInnerRadius = null

Radius of the inner circle of the interval ring.

+ +

intervalOuterRadius

this.intervalOuterRadius = null

Radius of the outer circle of the interval ring.

+ +

tickSpacing

this.tickSpacing = 30

Degrees between ticks.  This is a target number, if incompatible span and ticks are supplied, a suitable spacing close to this value will be computed.

+ +

hubRadius

this.hubRadius = null

Radius of the hub at the bottom center of gauge which the needle attaches to.  Auto computed by default

+ +

tickPadding

this.tickPadding = null

padding of the tick marks to the outer ring and the tick labels to marks.  Auto computed by default.

+ +

needleThickness

this.needleThickness = null

Maximum thickness the needle.  Auto computed by default.

+ +

needlePad

this.needlePad = 6

Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.

+ +

pegNeedle

this.pegNeedle = true

True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.

+ +
+ + + + + + + + + + +
this.diameter = null
Outer diameter of the meterGauge, auto computed by default
this.padding = null
padding between the meterGauge and plot edges, auto calculated by default.
this.shadowOffset = 2
offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 4
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.background = "#efefef"
background color of the inside of the gauge.
this.ringColor = "#BBC6D0"
color of the outer ring, hub, and needle of the gauge.
this.tickColor = "989898"
color of the tick marks around the gauge.
this.ringWidth = null
width of the ring around the gauge.
this.min
Minimum value on the gauge.
this.max
Maximum value on the gauge.
this.ticks = []
Array of tick values.
this.showTicks = true
true to show ticks around gauge.
this.showTickLabels = true
true to show tick labels next to ticks.
this.label = null
A gauge label like ‘kph’ or ‘Volts’
this.labelHeightAdjust = 0
Number of Pixels to offset the label up (-) or down (+) from its default position.
this.labelPosition = 'inside'
Where to position the label, either ‘inside’ or ‘bottom’.
this.intervals = []
Array of ranges to be drawn around the gauge.
this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]
Array of colors to use for the intervals.
this.intervalInnerRadius = null
Radius of the inner circle of the interval ring.
this.intervalOuterRadius = null
Radius of the outer circle of the interval ring.
this.tickSpacing = 30
Degrees between ticks.
this.hubRadius = null
Radius of the hub at the bottom center of gauge which the needle attaches to.
this.tickPadding = null
padding of the tick marks to the outer ring and the tick labels to marks.
this.needleThickness = null
Maximum thickness the needle.
this.needlePad = 6
Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
this.pegNeedle = true
True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html new file mode 100644 index 0000000..2a20089 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html @@ -0,0 +1,65 @@ + + +$.jqplot.OHLCRenderer + + + + + + + + + +

jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.

To use this plugin, include the renderer js file in your source:

<script type="text/javascript" src="plugins/jqplot.ohlcRenderer.js"></script>

You will most likely want to use a date axis renderer for the x axis also, so include the date axis render js file also:

<script type="text/javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>

Then you set the renderer in the series options on your plot

series: [{renderer:$.jqplot.OHLCRenderer}]

For OHLC and candlestick charts, data should be specified like so:

dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]

If the data array has only 4 values per point instead of 5, the renderer will create a Hi Low Close chart instead.  In that case, data should be supplied like:

dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]

To generate a candlestick chart instead of an OHLC chart, set the “candlestick” option to true:

series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
Summary
$.jqplot.OHLCRendererjqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
Properties
candleSticktrue to render chart as candleStick.
tickLengthlength of the line in pixels indicating open and close price.
bodyWidthwidth of the candlestick body in pixels.
openColorcolor of the open price tick mark.
closeColorcolor of the close price tick mark.
wickColorcolor of the hi-lo line thorugh the candlestick body.
fillUpBodytrue to render an “up” day (close price greater than open price) with a filled candlestick body.
fillDownBodytrue to render a “down” day (close price lower than open price) with a filled candlestick body.
upBodyColorColor of candlestick body of an “up” day.
downBodyColorColor of candlestick body on a “down” day.
hlctrue if is a hi-low-close chart (no open price).
lineWidthWidth of the hi-low line and open/close ticks.
+ +

Properties

+ +

candleStick

this.candleStick = false

true to render chart as candleStick.  Must have an open price, cannot be a hlc chart.

+ +

tickLength

this.tickLength = 'auto'

length of the line in pixels indicating open and close price.  Default will auto calculate based on plot width and number of points displayed.

+ +

bodyWidth

this.bodyWidth = 'auto'

width of the candlestick body in pixels.  Default will auto calculate based on plot width and number of candlesticks displayed.

+ +

openColor

this.openColor = null

color of the open price tick mark.  Default is series color.

+ +

closeColor

this.closeColor = null

color of the close price tick mark.  Default is series color.

+ +

wickColor

this.wickColor = null

color of the hi-lo line thorugh the candlestick body.  Default is the series color.

+ +

fillUpBody

this.fillUpBody = false

true to render an “up” day (close price greater than open price) with a filled candlestick body.

+ +

fillDownBody

this.fillDownBody = true

true to render a “down” day (close price lower than open price) with a filled candlestick body.

+ +

upBodyColor

this.upBodyColor = null

Color of candlestick body of an “up” day.  Default is series color.

+ +

downBodyColor

this.downBodyColor = null

Color of candlestick body on a “down” day.  Default is series color.

+ +

hlc

this.hlc = false

true if is a hi-low-close chart (no open price).  This is determined automatically from the series data.

+ +

lineWidth

this.lineWidth = 1.5

Width of the hi-low line and open/close ticks.  Must be set in the rendererOptions for the series.

+ +
+ + + + + + + + + + +
this.candleStick = false
true to render chart as candleStick.
this.tickLength = 'auto'
length of the line in pixels indicating open and close price.
this.bodyWidth = 'auto'
width of the candlestick body in pixels.
this.openColor = null
color of the open price tick mark.
this.closeColor = null
color of the close price tick mark.
this.wickColor = null
color of the hi-lo line thorugh the candlestick body.
this.fillUpBody = false
true to render an “up” day (close price greater than open price) with a filled candlestick body.
this.fillDownBody = true
true to render a “down” day (close price lower than open price) with a filled candlestick body.
this.upBodyColor = null
Color of candlestick body of an “up” day.
this.downBodyColor = null
Color of candlestick body on a “down” day.
this.hlc = false
true if is a hi-low-close chart (no open price).
this.lineWidth = 1.5
Width of the hi-low line and open/close ticks.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html new file mode 100644 index 0000000..5e25410 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html @@ -0,0 +1,93 @@ + + +$.jqplot.PieRenderer + + + + + + + + + +

Plugin renderer to draw a pie chart. x values, if present, will be used as slice labels. y values give slice size.

To use this renderer, you need to include the pie renderer plugin, for example:

<script type="text/javascript" src="plugins/jqplot.pieRenderer.js"></script>

Properties described here are passed into the $.jqplot function as options on the series renderer.  For example:

plot2 = $.jqplot('chart2', [s1, s2], {
+    seriesDefaults: {
+        renderer:$.jqplot.PieRenderer,
+        rendererOptions:{
+             sliceMargin: 2,
+             startAngle: -90
+         }
+     }
+});

A pie plot will trigger events on the plot target according to user interaction.  All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.

’jqplotDataMouseOver’triggered when user mouseing over a slice.
’jqplotDataHighlight’triggered the first time user mouses over a slice, if highlighting is enabled.
’jqplotDataUnhighlight’triggered when a user moves the mouse out of a highlighted slice.
’jqplotDataClick’triggered when the user clicks on a slice.
’jqplotDataRightClick’tiggered when the user right clicks on a slice if the “captureRightClick” option is set to true on the plot.
Summary
$.jqplot.PieRendererPlugin renderer to draw a pie chart.
Properties
diameterOuter diameter of the pie, auto computed by default
paddingpadding between the pie and plot edges, legend, etc.
sliceMarginangular spacing between pie slices in degrees.
filltrue or false, wether to fil the slices.
shadowOffsetoffset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
shadowAlphatransparency of the shadow (0 = transparent, 1 = opaque)
shadowDepthnumber of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a slice.
dataLabelsEither ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
showDataLabelstrue to show data labels on slices.
dataLabelFormatStringFormat string for data labels.
dataLabelThresholdThreshhold in percentage (0-100) of pie area, below which no label will be displayed.
dataLabelPositionFactorA Multiplier (0-1) of the pie radius which controls position of label on slice.
dataLabelNudgeNumber of pixels to slide the label away from (+) or toward (-) the center of the pie.
dataLabelCenterOnTrue to center the data label at its position.
startAngleAngle to start drawing pie in degrees.
$.jqplot.PieLegendRendererLegend Renderer specific to pie plots.
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

diameter

this.diameter = null

Outer diameter of the pie, auto computed by default

+ +

padding

this.padding = 20

padding between the pie and plot edges, legend, etc.

+ +

sliceMargin

this.sliceMargin = 0

angular spacing between pie slices in degrees.

+ +

fill

this.fill = true

true or false, wether to fil the slices.

+ +

shadowOffset

this.shadowOffset = 2

offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.

+ +

shadowAlpha

this.shadowAlpha = 0.07

transparency of the shadow (0 = transparent, 1 = opaque)

+ +

shadowDepth

this.shadowDepth = 5

number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

+ +

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a slice.

+ +

dataLabels

this.dataLabels = 'percent'

Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.  Defaults to percentage of each pie slice.

+ +

showDataLabels

this.showDataLabels = false

true to show data labels on slices.

+ +

dataLabelFormatString

this.dataLabelFormatString = null

Format string for data labels.  If none, ‘%s’ is used for “label” and for arrays, ‘%d’ for value and ‘%d%%’ for percentage.

+ +

dataLabelThreshold

this.dataLabelThreshold = 3

Threshhold in percentage (0-100) of pie area, below which no label will be displayed.  This applies to all label types, not just to percentage labels.

+ +

dataLabelPositionFactor

this.dataLabelPositionFactor = 0.52

A Multiplier (0-1) of the pie radius which controls position of label on slice.  Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.

+ +

dataLabelNudge

this.dataLabelNudge = 2

Number of pixels to slide the label away from (+) or toward (-) the center of the pie.

+ +

dataLabelCenterOn

this.dataLabelCenterOn = true

True to center the data label at its position.  False to set the inside facing edge of the label at its position.

+ +

startAngle

this.startAngle = 0

Angle to start drawing pie in degrees.  According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.  90 = on the negaive y axis.  180 or - 180 = on the negative x axis.

+ +

$.jqplot.PieLegendRenderer

Legend Renderer specific to pie plots.  Set by default when user creates a pie plot.

Summary
Properties
numberRowsMaximum number of rows in the legend.
numberColumnsMaximum number of columns in the legend.
+ +

Properties

+ +

numberRows

this.numberRows = null

Maximum number of rows in the legend.  0 or null for unlimited.

+ +

numberColumns

this.numberColumns = null

Maximum number of columns in the legend.  0 or null for unlimited.

+ +
+ + + + + + + + + + +
this.diameter = null
Outer diameter of the pie, auto computed by default
this.padding = 20
padding between the pie and plot edges, legend, etc.
this.sliceMargin = 0
angular spacing between pie slices in degrees.
this.fill = true
true or false, wether to fil the slices.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.showDataLabels = false
true to show data labels on slices.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelThreshold = 3
Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
this.dataLabelPositionFactor = 0.52
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelNudge = 2
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelCenterOn = true
True to center the data label at its position.
this.startAngle = 0
Angle to start drawing pie in degrees.
this.numberRows = null
Maximum number of rows in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-pointLabels-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-pointLabels-js.html new file mode 100644 index 0000000..36d309c --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-pointLabels-js.html @@ -0,0 +1,72 @@ + + +$.jqplot.PointLabels + + + + + + + + + +

Plugin for putting labels at the data points.

To use this plugin, include the js file in your source:

<script type="text/javascript" src="plugins/jqplot.pointLabels.js"></script>

By default, the last value in the data ponit array in the data series is used for the label.  For most series renderers, extra data can be added to the data point arrays and the last value will be used as the label.

For instance, this series:

[[1,4], [3,5], [7,2]]

Would, by default, use the y values in the labels.  Extra data can be added to the series like so:

[[1,4,'mid'], [3 5,'hi'], [7,2,'low']]

And now the point labels would be ‘mid’, ‘low’, and ‘hi’.

Options to the point labels and a custom labels array can be passed into the “pointLabels” option on the series option like so:

series:[{pointLabels:{
+   labels:['mid', 'hi', 'low'],
+   location:'se',
+   ypadding: 12
+   }
+}]

A custom labels array in the options takes precendence over any labels in the series data.  If you have a custom labels array in the options, but still want to use values from the series array as labels, set the “labelsFromSeries” option to true.

By default, html entities (<, >, etc.) are escaped in point labels.  If you want to include actual html markup in the labels, set the “escapeHTML” option to false.

Summary
$.jqplot.PointLabelsPlugin for putting labels at the data points.
Properties
showshow the labels or not.
locationcompass location where to position the label around the point.
labelsFromSeriestrue to use labels within data point arrays.
seriesLabelIndexarray index for location of labels within data point arrays.
labelsarray of arrays of labels, one array for each series.
stackedValuetrue to display value as stacked in a stacked plot.
ypaddingvertical padding in pixels between point and label
xpaddinghorizontal padding in pixels between point and label
escapeHTMLtrue to escape html entities in the labels.
edgeToleranceNumber of pixels that the label must be away from an axis boundary in order to be drawn.
formatterA class of a formatter for the tick text.
formatStringstring passed to the formatter.
hideZerostrue to not show a label for a value which is 0.
+ +

Properties

+ +

show

this.show = $.jqplot.config.enablePlugins

show the labels or not.

+ +

location

this.location = 'n'

compass location where to position the label around the point.  ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’

+ +

labelsFromSeries

this.labelsFromSeries = false

true to use labels within data point arrays.

+ +

seriesLabelIndex

this.seriesLabelIndex = null

array index for location of labels within data point arrays. if null, will use the last element of the data point array.

+ +

labels

this.labels = []

array of arrays of labels, one array for each series.

+ +

stackedValue

this.stackedValue = false

true to display value as stacked in a stacked plot. no effect if labels is specified.

+ +

ypadding

this.ypadding = 6

vertical padding in pixels between point and label

+ +

xpadding

this.xpadding = 6

horizontal padding in pixels between point and label

+ +

escapeHTML

this.escapeHTML = true

true to escape html entities in the labels.  If you want to include markup in the labels, set to false.

+ +

edgeTolerance

this.edgeTolerance = -5

Number of pixels that the label must be away from an axis boundary in order to be drawn.  Negative values will allow overlap with the grid boundaries.

+ +

formatter

this.formatter = $.jqplot.DefaultTickFormatter

A class of a formatter for the tick text.  sprintf by default.

+ +

formatString

this.formatString = ''

string passed to the formatter.

+ +

hideZeros

this.hideZeros = false

true to not show a label for a value which is 0.

+ +
+ + + + + + + + + + +
this.show = $.jqplot.config.enablePlugins
show the labels or not.
this.location = 'n'
compass location where to position the label around the point.
this.labelsFromSeries = false
true to use labels within data point arrays.
this.seriesLabelIndex = null
array index for location of labels within data point arrays.
this.labels = []
array of arrays of labels, one array for each series.
this.stackedValue = false
true to display value as stacked in a stacked plot.
this.ypadding = 6
vertical padding in pixels between point and label
this.xpadding = 6
horizontal padding in pixels between point and label
this.escapeHTML = true
true to escape html entities in the labels.
this.edgeTolerance = -5
Number of pixels that the label must be away from an axis boundary in order to be drawn.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatString = ''
string passed to the formatter.
this.hideZeros = false
true to not show a label for a value which is 0.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html new file mode 100644 index 0000000..4cf690b --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html @@ -0,0 +1,49 @@ + + +/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidAxisRenderer.js + + + + + + + + + +
Summary
jqplot.pyramidAxisRenderer.js
Properties
positionPosition of axis.
drawBaselineTrue to draw the axis baseline.
baselineWidthwidth of the baseline in pixels.
baselineColorCSS color spec for the baseline.
+ +

Properties

+ +

position

this.position = null

Position of axis.  Values are: top, bottom , left, center, right.  By default, x and x2 axes are bottom, y axis is center.

+ +

drawBaseline

this.drawBaseline = true

True to draw the axis baseline.

+ +

baselineWidth

this.baselineWidth = null

width of the baseline in pixels.

+ +

baselineColor

this.baselineColor = null

CSS color spec for the baseline.

+ +
+ + + + + + + + + + +
this.position = null
Position of axis.
this.drawBaseline = true
True to draw the axis baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineColor = null
CSS color spec for the baseline.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html new file mode 100644 index 0000000..2755c0e --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html @@ -0,0 +1,39 @@ + + +$.jqplot.CanvasGridRenderer + + + + + + + + + +

The default jqPlot grid renderer, creating a grid on a canvas element.  The renderer has no additional options beyond the Grid class.

+ +
+ + + + + + + + + + +
Object representing the grid on which the plot is drawn.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html new file mode 100644 index 0000000..3ff6678 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html @@ -0,0 +1,55 @@ + + +/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidRenderer.js + + + + + + + + + +
Summary
jqplot.pyramidRenderer.js
Properties
barPadding
fillTrue to fill the bars.
highlightMouseOverTrue to highlight slice when moused over.
highlightMouseDownTrue to highlight when a mouse button is pressed over a slice.
highlightColorsan array of colors to use when highlighting a slice.
synchronizeHighlightIndex of another series to highlight when this series is highlighted.
offsetBarsFalse will center bars on their y value.
+ +

Properties

+ +

barPadding

this.barPadding = 10
+ +

fill

this.fill = true

True to fill the bars.

+ +

highlightMouseOver

this.highlightMouseOver = true

True to highlight slice when moused over.  This must be false to enable highlightMouseDown to highlight when clicking on a slice.

+ +

highlightMouseDown

this.highlightMouseDown = false

True to highlight when a mouse button is pressed over a slice.  This will be disabled if highlightMouseOver is true.

+ +

highlightColors

this.highlightColors = []

an array of colors to use when highlighting a slice.

+ +

synchronizeHighlight

this.synchronizeHighlight = false

Index of another series to highlight when this series is highlighted. null or false to not synchronize.

+ +

offsetBars

this.offsetBars = false

False will center bars on their y value.  True will push bars up by 1/2 bar width to fill between their y values.  If true, there needs to be 1 more tick than there are bars.

+ +
+ + + + + + + + + + +
this.barPadding = 10
this.fill = true
True to fill the bars.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.synchronizeHighlight = false
Index of another series to highlight when this series is highlighted.
this.offsetBars = false
False will center bars on their y value.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/plugins/jqplot-trendline-js.html b/public/javascripts/jqplot/docs/files/plugins/jqplot-trendline-js.html new file mode 100644 index 0000000..e773b71 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/plugins/jqplot-trendline-js.html @@ -0,0 +1,67 @@ + + +$.jqplot.Trendline + + + + + + + + + +

Plugin which will automatically compute and draw trendlines for plotted data.

Summary
$.jqplot.TrendlinePlugin which will automatically compute and draw trendlines for plotted data.
Properties
showWether or not to show the trend line.
colorCSS color spec for the trend line.
rendererRenderer to use to draw the trend line.
rendererOptionsOptions to pass to the line renderer.
labelLabel for the trend line to use in the legend.
typeEither ‘exponential’, ‘exp’, or ‘linear’.
shadowtrue or false, wether or not to show the shadow.
markerRendererRenderer to use to draw markers on the line.
lineWidthWidth of the trend line.
shadowAngleAngle of the shadow on the trend line.
shadowOffsetpixel offset for each stroke of the shadow.
shadowAlphaAlpha transparency of the shadow.
shadowDepthnumber of strokes to make of the shadow.
+ +

Properties

+ +

show

this.show = $.jqplot.config.enablePlugins

Wether or not to show the trend line.

+ +

color

this.color = '#666666'

CSS color spec for the trend line.  By default this wil be the same color as the primary line.

+ +

renderer

this.renderer = new $.jqplot.LineRenderer()

Renderer to use to draw the trend line.  The data series that is plotted may not be rendered as a line.  Therefore, we use our own line renderer here to draw a trend line.

+ +

rendererOptions

this.rendererOptions = {marker:{show:false}}

Options to pass to the line renderer.  By default, markers are not shown on trend lines.

+ +

label

this.label = ''

Label for the trend line to use in the legend.

+ +

type

this.type = 'linear'

Either ‘exponential’, ‘exp’, or ‘linear’.

+ +

shadow

this.shadow = true

true or false, wether or not to show the shadow.

+ +

markerRenderer

this.markerRenderer = {show:false}

Renderer to use to draw markers on the line.  I think this is wrong.

+ +

lineWidth

this.lineWidth = 1.5

Width of the trend line.

+ +

shadowAngle

this.shadowAngle = 45

Angle of the shadow on the trend line.

+ +

shadowOffset

this.shadowOffset = 1.0

pixel offset for each stroke of the shadow.

+ +

shadowAlpha

this.shadowAlpha = 0.07

Alpha transparency of the shadow.

+ +

shadowDepth

this.shadowDepth = 3

number of strokes to make of the shadow.

+ +
+ + + + + + + + + + +
this.show = $.jqplot.config.enablePlugins
Wether or not to show the trend line.
this.color = '#666666'
CSS color spec for the trend line.
this.renderer = new $.jqplot.LineRenderer()
Renderer to use to draw the trend line.
this.rendererOptions = {marker:{show:false}}
Options to pass to the line renderer.
this.label = ''
Label for the trend line to use in the legend.
this.type = 'linear'
Either ‘exponential’, ‘exp’, or ‘linear’.
this.shadow = true
true or false, wether or not to show the shadow.
this.markerRenderer = {show:false}
Renderer to use to draw markers on the line.
this.lineWidth = 1.5
Width of the trend line.
this.shadowAngle = 45
Angle of the shadow on the trend line.
this.shadowOffset = 1.0
pixel offset for each stroke of the shadow.
this.shadowAlpha = 0.07
Alpha transparency of the shadow.
this.shadowDepth = 3
number of strokes to make of the shadow.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/files/usage-txt.html b/public/javascripts/jqplot/docs/files/usage-txt.html new file mode 100644 index 0000000..d4d4009 --- /dev/null +++ b/public/javascripts/jqplot/docs/files/usage-txt.html @@ -0,0 +1,58 @@ + + +jqPlot Usage + + + + + + + + + +

Usage Documentation

Introduction

jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages.

The jqPlot home page is at http://www.jqplot.com/.

The project page and downloads are at http://www.bitbucket.org/cleonello/jqplot/.

Below are a few examples to demonstrate jqPlot usage.  These plots are shown as static images.  Many more examples of dynamically rendered plots can be seen on the test and examples pages here: ../../tests/.

Include the Files

jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution.  To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas script for IE support in your web page.  Note, excanvas is required only for IE versions below 9.  IE 9 includes native support for the canvas element and does not require excanvas:

<!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+<script language="javascript" type="text/javascript" src="jquery.min.js"></script>
+<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+<link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />

Add a plot container

Add a container (target) to your web page where you want your plot to show up.  Be sure to give your target a width and a height:

<div id="chartdiv" style="height:400px;width:300px; "></div>

Create a plot

Then, create the actual plot by calling the $.jqplot plugin with the id of your target and some data:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);

Which will produce a chart like:

Plot Options

You can customize the plot by passing options to the $.jqplot function.  Options are described in jqPlot Options in the jqPlotOptions.txt file.  An example of options usage:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+{ title:'Exponential Line',
+  axes:{yaxis:{min:-10, max:240}},
+  series:[{color:'#5FAB78'}]
+});

Which will produce a plot like:

Using Plugins

You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html after you include the jqPlot plugin.  Here is how to include the log axis plugin:

<link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
+<!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+<script language="javascript" type="text/javascript" src="jquery.min.js"></script>
+<script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
+<script language="javascript" type="text/javascript" src="jqplot.logAxisRenderer.js"></script>

Important note: For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly enable plugins via either the { show: true } plugin option to the plot or by using the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation.  Only plugins that can be immediately active upon loading are affected.  This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.

Here is a the same $.jqplot call but with a log y axis:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+{ title:'Exponential Line',
+  axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}},
+  series:[{color:'#5FAB78'}]
+});

Which produces a plot like:

You can further customize with options specific to the log axis plugin:

$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
+{ title:'Exponential Line',
+  axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}},
+  series:[{color:'#5FAB78'}]
+});

Which makes a plot like:

For a full list of options, see jqPlot Options in the jqPlotOptions.txt file.

You can add as many plugins as you wish.  Order is generally not important.  Some plugins, like the highlighter plugin which highlights data points near the mouse, don’t need any extra options or setup to function.  Highlighter does have additional options which the user can set.

Other plugins, the barRenderer for example, provide functionality the must be specified in the chart options object.  To render a series as a bar graph with the bar renderer, you would first include the plugin after jqPlot:

<script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script>

Then you would create a chart like:

$.jqplot('chartdiv',  [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});

Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series.

+ +
+ + + + + + + + + + +
This document is out of date.
+ + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index.html b/public/javascripts/jqplot/docs/index.html new file mode 100644 index 0000000..295fd4a --- /dev/null +++ b/public/javascripts/jqplot/docs/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Classes.html b/public/javascripts/jqplot/docs/index/Classes.html new file mode 100644 index 0000000..f34f9a3 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Classes.html @@ -0,0 +1,70 @@ + + +Class Index + + + + + + + + + +
Class Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
$#!
 $.fn
 $.jqplot
 $.jqplot.AxisLabelRenderer
 $.jqplot.AxisTickRenderer
 $.jqplot.BarRenderer
 $.jqplot.BezierCurveRenderer.js
 $.jqplot.BlockRenderer
 $.jqplot.BubbleRenderer
 $.jqplot.CanvasAxisLabelRenderer
 $.jqplot.CanvasAxisTickRenderer
 $.jqplot.CanvasGridRenderer
 $.jqplot.CanvasOverlay
 $.jqplot.CategoryAxisRenderer
 $.jqplot.ciParser
 $.jqplot.Cursor
 $.jqplot.DateAxisRenderer
 $.jqplot.DivTitleRenderer
 $.jqplot.DonutLegendRenderer
 $.jqplot.DonutRenderer
 $.jqplot.Dragable
 $.jqplot.FunnelLegendRenderer
 $.jqplot.FunnelRenderer
 $.jqplot.Highlighter
 $.jqplot.LinearAxisRenderer
 $.jqplot.LineRenderer
 $.jqplot.LogAxisRenderer
 $.jqplot.MarkerRenderer
 $.jqplot.MekkoAxisRenderer
 $.jqplot.MekkoLegendRenderer
 $.jqplot.MekkoRenderer
 $.jqplot.MeterGaugeRenderer
 $.jqplot.OHLCRenderer
 $.jqplot.PieLegendRenderer
 $.jqplot.PieRenderer
 $.jqplot.PointLabels
 $.jqplot.shadowRenderer
 $.jqplot.shapeRenderer
 $.jqplot.ThemeEngine
 $.jqplot.Trendline
A
 Axis
D
 DashedHorizontalLine
 DashedVerticalLine
G
 Grid
H
 HorizontalLine
J
 jqPlot
L
 Legend
 Line
S
 Series
T
 Title
V
 VerticalLine
+ +
jQuery namespace to attach functions to jQuery elements.
jQuery function called by the user to create a plot.
Renderer to place labels on the axes.
A “tick” object showing the value of a tick/gridline on the plot.
A plugin renderer for jqPlot to draw a bar plot.
Renderer which draws lines as stacked bezier curves.
Plugin renderer to draw a x-y block chart.
Plugin renderer to draw a bubble chart.
Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.
Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.
The default jqPlot grid renderer, creating a grid on a canvas element.
A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
Data Renderer function which converts a custom JSON data object into jqPlot data format.
Plugin class representing the cursor as displayed on the plot.
A plugin for a jqPlot to render an axis as a series of date values.
The default title renderer for jqPlot.
Legend Renderer specific to donut plots.
Plugin renderer to draw a donut chart.
Plugin to make plotted points dragable by the user.
Legend Renderer specific to funnel plots.
Plugin renderer to draw a funnel chart.
Plugin which will highlight data points when they are moused over.
The default jqPlot axis renderer, creating a numeric axis.
The default line renderer for jqPlot, this class has no options beyond the Series class.
A plugin for a jqPlot to render a logarithmic axis.
The default jqPlot marker renderer, rendering the points on the line.
An axis renderer for a Mekko chart.
Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.
Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
Plugin renderer to draw a meter gauge chart.
jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
Legend Renderer specific to pie plots.
Plugin renderer to draw a pie chart.
Plugin for putting labels at the data points.
The default jqPlot shadow renderer, rendering shadows behind shapes.
The default jqPlot shape renderer.
Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.
Plugin which will automatically compute and draw trendlines for plotted data.
+ + + +
An individual axis object.
+ + + +
A straight dashed horizontal line.
A straight dashed vertical line.
+ + + +
Object representing the grid on which the plot is drawn.
+ + + +
A straight horizontal line.
+ + + +
Plot object returned by call to $.jqplot.
+ + + +
Legend object.
A straight line.
+ + + +
An individual data series object.
+ + + +
Plot Title object.
+ + + +
A straight vertical line.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Files.html b/public/javascripts/jqplot/docs/index/Files.html new file mode 100644 index 0000000..9198c42 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Files.html @@ -0,0 +1,34 @@ + + +File Index + + + + + + + + + +
File Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
J
 jqplot.enhancedLegendRenderer.js
 jqplot.pyramidAxisRenderer.js
 jqplot.pyramidRenderer.js
+ + + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Functions.html b/public/javascripts/jqplot/docs/index/Functions.html new file mode 100644 index 0000000..dbc1d7c --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Functions.html @@ -0,0 +1,70 @@ + + +Function Index + + + + + + + + + +
Function Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 copy, $.jqplot.ThemeEngine
D
 destroy, jqPlot
 draw
 drawSeries, jqPlot
G
 get, $.jqplot.ThemeEngine
 getThemeNames, $.jqplot.ThemeEngine
 getThemes, $.jqplot.ThemeEngine
I
 init, jqPlot
M
 makeGridData
 moveBlock, $.jqplot.BlockRenderer
 moveSeriesToBack, jqPlot
 moveSeriesToFront, jqPlot
N
 newTheme, $.jqplot.ThemeEngine
Q
 quickInit, jqPlot
R
 redraw, jqPlot
 reInitialize, jqPlot
 remove, $.jqplot.ThemeEngine
 rename, $.jqplot.ThemeEngine
 replot, jqPlot
 resetAxesScale, jqPlot
 restoreOriginalSeriesOrder, jqPlot
 restorePreviousSeriesOrder, jqPlot
S
 setGridData
Z
 zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
+ +
$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)
Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
+ + + +
this.destroy = function()
Releases all resources occupied by the plot
$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)
draws an transparent black (i.e.
$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)
draws the shape.
this.draw = function()
Draws all elements of the plot into the container.
this.drawSeries = function(options,
idx)
Redraws all or just one series on the plot.
+ + + +
$.jqplot.ThemeEngine.prototype.get = function(name)
Get and return the named theme or the active theme if no name given.
$.jqplot.ThemeEngine.prototype.getThemeNames = function()
Return the list of theme names in this manager in alpha-numerical order.
$.jqplot.ThemeEngine.prototype.getThemes = function()
Return a list of themes in alpha-numerical order by name.
+ + + +
this.init = function(target,
data,
options)
sets the plot target, checks data and applies user options to plot.
+ + + +
$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
this.moveBlock = function (idx,
x,
y,
duration)
Moves an individual block.
this.moveSeriesToBack = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
this.moveSeriesToFront = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
+ + + +
$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)
Create a new theme based on the default theme, adding it the themeEngine.
+ + + +
this.quickInit = function ()
Quick reinitialization plot for replotting.
+ + + +
this.redraw = function(clear)
Empties the plot target div and redraws the plot.
this.reInitialize = function (data,
opts)
reinitialize plot for replotting.
$.jqplot.ThemeEngine.prototype.remove = function(name)
Remove the given theme from the themeEngine.
$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)
Rename a theme.
this.replot = function(options)
Does a reinitialization of the plot followed by a redraw.
this.resetAxesScale = function(axes,
options)
Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
this.restoreOriginalSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
this.restorePreviousSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its previous state.
+ + + +
$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
+ + + +
$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)
links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General.html b/public/javascripts/jqplot/docs/index/General.html new file mode 100644 index 0000000..d9450d7 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General.html @@ -0,0 +1,42 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
$#!
 $.fn
 $.jqplot
 $.jqplot.AxisLabelRenderer
 $.jqplot.AxisTickRenderer
 $.jqplot.BarRenderer
 $.jqplot.BezierCurveRenderer.js
 $.jqplot.BlockRenderer
 $.jqplot.BubbleRenderer
 $.jqplot.CanvasAxisLabelRenderer
 $.jqplot.CanvasAxisTickRenderer
 $.jqplot.CanvasGridRenderer
 $.jqplot.CanvasOverlay
 $.jqplot.CategoryAxisRenderer
 $.jqplot.ciParser
 $.jqplot.Cursor
 $.jqplot.DateAxisRenderer
 $.jqplot.DivTitleRenderer
 $.jqplot.DonutLegendRenderer
 $.jqplot.DonutRenderer
 $.jqplot.Dragable
 $.jqplot.FunnelLegendRenderer
 $.jqplot.FunnelRenderer
 $.jqplot.Highlighter
 $.jqplot.LinearAxisRenderer
 $.jqplot.LineRenderer
 $.jqplot.LogAxisRenderer
 $.jqplot.MarkerRenderer
 $.jqplot.MekkoAxisRenderer
 $.jqplot.MekkoLegendRenderer
 $.jqplot.MekkoRenderer
 $.jqplot.MeterGaugeRenderer
 $.jqplot.OHLCRenderer
 $.jqplot.PieLegendRenderer
 $.jqplot.PieRenderer
 $.jqplot.PointLabels
 $.jqplot.shadowRenderer
 $.jqplot.shapeRenderer
 $.jqplot.ThemeEngine
 $.jqplot.Trendline
A
 activeTheme, $.jqplot.ThemeEngine
 addLegendRowHooks, $.jqplot.$.jqplot
 alignTicks, $.jqplot.LinearAxisRenderer
 alpha, $.jqplot.shadowRenderer
 angle
 animate, jqPlot
 animateReplot, jqPlot
 autoscale, Axis
 autoscaleBubbles, $.jqplot.BubbleRenderer
 autoscaleMultiplier, $.jqplot.BubbleRenderer
 autoscalePointsFactor, $.jqplot.BubbleRenderer
 Available Options
 axes, jqPlot
 axesDefaults, jqPlot
 Axis
 axisDefaults, $.jqplot.LogAxisRenderer
B
 background
 bandData, $.jqplot.LineRenderer
 bands, $.jqplot.LineRenderer
 barDirection, $.jqplot.BarRenderer
 barLabelOptions, $.jqplot.MekkoAxisRenderer
 barLabelRenderer, $.jqplot.MekkoAxisRenderer
 barLabels, $.jqplot.MekkoAxisRenderer
 barMargin, $.jqplot.BarRenderer
 barPadding
 barWidth, $.jqplot.BarRenderer
 baselineColor
 baselineWidth
 bodyWidth, $.jqplot.OHLCRenderer
 border, Legend
 borderColor
 borderWidth
 breakOnNull, Series
 breakPoints, $.jqplot.LinearAxisRenderer
 breakTickLabel, $.jqplot.LinearAxisRenderer
 bringSeriesToFront, $.jqplot.Highlighter
 bubbleAlpha, $.jqplot.BubbleRenderer
 bubbleGradients, $.jqplot.BubbleRenderer
+ +
jQuery namespace to attach functions to jQuery elements.
jQuery function called by the user to create a plot.
Renderer to place labels on the axes.
A “tick” object showing the value of a tick/gridline on the plot.
A plugin renderer for jqPlot to draw a bar plot.
Renderer which draws lines as stacked bezier curves.
Plugin renderer to draw a x-y block chart.
Plugin renderer to draw a bubble chart.
Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.
Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.
The default jqPlot grid renderer, creating a grid on a canvas element.
A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
Data Renderer function which converts a custom JSON data object into jqPlot data format.
Plugin class representing the cursor as displayed on the plot.
A plugin for a jqPlot to render an axis as a series of date values.
The default title renderer for jqPlot.
Legend Renderer specific to donut plots.
Plugin renderer to draw a donut chart.
Plugin to make plotted points dragable by the user.
Legend Renderer specific to funnel plots.
Plugin renderer to draw a funnel chart.
Plugin which will highlight data points when they are moused over.
The default jqPlot axis renderer, creating a numeric axis.
The default line renderer for jqPlot, this class has no options beyond the Series class.
A plugin for a jqPlot to render a logarithmic axis.
The default jqPlot marker renderer, rendering the points on the line.
An axis renderer for a Mekko chart.
Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.
Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
Plugin renderer to draw a meter gauge chart.
jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
Legend Renderer specific to pie plots.
Plugin renderer to draw a pie chart.
Plugin for putting labels at the data points.
The default jqPlot shadow renderer, rendering shadows behind shapes.
The default jqPlot shape renderer.
Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.
Plugin which will automatically compute and draw trendlines for plotted data.
+ + + +
this.activeTheme=null
Pointer to currently active theme
called at the end of legend draw, so plugins can add rows to the legend table.
this.alignTicks = false
true to align tick marks across opposed axes such as from the y2axis to yaxis.
this.alpha = 0.07
alpha transparency of shadow stroke.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 45
Angle of the shadow in degrees.
this.animate = false
True to animate the series on initial plot draw (renderer dependent).
this.animateReplot = false
True to animate series after a call to the replot() method.
this.autoscale = false
DEPRECATED the default scaling algorithm produces superior results.
this.autoscaleBubbles = true
True to scale the bubble radius based on plot size.
this.autoscaleMultiplier = 1.0
Multiplier the bubble size if autoscaleBubbles is true.
this.autoscalePointsFactor = -0.07
Factor which decreases bubble size based on how many bubbles on on the chart.
See jqPlot Options for a list of options available thorugh the options object (not complete yet!)
this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}
up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
default options that will be applied to all axes.
An individual axis object.
Default properties which will be applied directly to the series.
+ + + +
this.background = "#efefef"
background color of the inside of the gauge.
this.background = '#fffdf6'
css spec for the background color.
this.background
css spec for the background of the legend box.
this.renderer.bandData = []
Data used to draw error bands or confidence intervals above/below a line.
Banding around line, e.g error bands or confidence intervals.
this.barDirection = 'vertical'
‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
this.barLabelOptions = {}
options object to pass to the bar label renderer.
this.barLabelRenderer = $.jqplot.AxisLabelRenderer
renderer to use to draw labels under each bar.
this.barLabels = this.barLabels || []
array of labels to put under each bar.
this.barMargin = 10
Number of pixels between groups of bars at adjacent axis values.
this.barPadding = 10
this.barPadding = 8
Number of pixels between adjacent bars at the same axis value.
this.barWidth = null
Width of the bar in pixels (auto by devaul).
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.bodyWidth = 'auto'
width of the candlestick body in pixels.
this.border
css spec for the border around the legend box.
this.borderColor = null
color of the borders between areas on the chart
this.borderColor = null
color of the border adjacent to the axis.
this.borderColor = '#999999'
css spec for the color of the grid border.
this.borderWidth = null
width of line stroked at the border of the axis.
this.borderWidth = 2.0
width of the border in pixels.
this.breakOnNull = false
Wether line segments should be be broken at null value.
this.breakPoints = null
EXPERIMENTAL!! 
this.breakTickLabel = "&asymp
Label to use at the axis break if breakPoints are specified.
this.bringSeriesToFront = false
This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
this.bubbleAlpha = 1.0
Alpha transparency to apply to all bubbles in this series.
this.bubbleGradients = false
True to color the bubbles with gradient fills instead of flat colors.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General2.html b/public/javascripts/jqplot/docs/index/General2.html new file mode 100644 index 0000000..3332307 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General2.html @@ -0,0 +1,42 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
C
 candleStick, $.jqplot.OHLCRenderer
 Change Log
 Changes
 clearRect, $.jqplot.shapeRenderer
 clickReset, $.jqplot.Cursor
 closeColor, $.jqplot.OHLCRenderer
 color
 constrainOutsideZoom, $.jqplot.Cursor
 constrainSmoothing, $.jqplot.LineRenderer
 constrainTo, $.jqplot.Dragable
 constrainZoomTo, $.jqplot.Cursor
 copy, $.jqplot.ThemeEngine
 Copyright&License
 css, $.jqplot.BlockRenderer
 cursorLegendFormatString, $.jqplot.Cursor
D
 DashedHorizontalLine
 DashedVerticalLine
 dashPattern
 data, jqPlot
 dataLabelCenterOn, $.jqplot.PieRenderer
 dataLabelFormatString
 dataLabelNudge
 dataLabelPositionFactor
 dataLabels
 dataLabelThreshold
 dataRenderer, jqPlot
 dataRendererOptions, jqPlot
 dblClickReset, $.jqplot.Cursor
 defaultAxisStart, jqPlot
 depth, $.jqplot.shadowRenderer
 destroy, jqPlot
 diameter
 disableIEFading
 disableStack, Series
 downBodyColor, $.jqplot.OHLCRenderer
 draw
 drawBaseline
 drawBorder, Grid
 drawGridlines, Grid
 drawMajorGridlines, Axis
 drawMajorTickMarks, Axis
 drawMinorGridlines, Axis
 drawMinorTickMarks, Axis
 drawSeries, jqPlot
E
 edgeTolerance, $.jqplot.PointLabels
 enableFontSupport
 escapeHtml
 escapeHTML
 eventListenerHooks, $.jqplot.$.jqplot
+ +
this.candleStick = false
true to render chart as candleStick.
See Change Log
this.clearRect = false
true to cear a rectangle.
this.clickReset = false
Will reset plot zoom if single click on plot without drag.
this.closeColor = null
color of the close price tick mark.
color of the line
this.color
CSS color spec for the dragged point (and adjacent line segment or bar).
color of lines at top and bottom of bands [default: series color].
this.color = '#666666'
color of marker.
this.color = '#666666'
CSS color spec for the trend line.
this.color
css color spec for the series
this.constrainOutsideZoom = true
True to limit actual zoom area to edges of grid, even when zooming outside of plot area.
this.renderer.constrainSmoothing = true
True to use a more accurate smoothing algorithm that will not overshoot any data points.
this.constrainTo = 'none'
Constrain dragging motion to an axis or to none.
this.constrainZoomTo = 'none'
‘none’, ‘x’ or ‘y’
$.jqplot.ThemeEngine.prototype.copy = function (sourceName,
targetName,
obj)
Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
Copyright © 2009-2012 Chris Leonello jqPlot is currently available for use in all personal or commercial projects under both the MIT and GPL version 2.0 licenses.
this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}
default css styles that will be applied to all data blocks.
this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString
Format string used in the cursor legend.
+ + + +
A straight dashed horizontal line.
A straight dashed vertical line.
dashPattern: [8,8] }
Array of line, space settings in pixels.
dashPattern: [8,8] }
Array of line, space settings in pixels.
this.data = []
user’s data.
this.dataLabelCenterOn = true
True to center the data label at its position.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelNudge = 0
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelNudge = 2
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelPositionFactor = 0.4
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelPositionFactor = 0.52
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
this.dataRenderer
A callable which can be used to preprocess data passed into the plot.
this.dataRendererOptions
Options that will be passed to the dataRenderer.
this.dblClickReset = true
Will reset plot zoom if double click on plot without drag.
this.defaultAxisStart = 1
1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
this.depth = 3
how many times the shadow is stroked.
this.destroy = function()
Releases all resources occupied by the plot
this.diameter = null
Outer diameter of the donut, auto computed by default
this.diameter = null
Outer diameter of the meterGauge, auto computed by default
this.diameter = null
Outer diameter of the pie, auto computed by default
this.disableIEFading = true
true to toggle series with a show/hide method only and not allow fading in/out.
this.disableStack = false
true to not stack this series with other series in the plot.
this.downBodyColor = null
Color of candlestick body on a “down” day.
$.jqplot.ShadowRenderer.prototype.draw = function(ctx,
points,
options)
draws an transparent black (i.e.
$.jqplot.ShapeRenderer.prototype.draw = function(ctx,
points,
options)
draws the shape.
this.draw = function()
Draws all elements of the plot into the container.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBorder = true
True to draw border around grid.
this.drawGridlines = true
wether to draw the gridlines on the plot.
this.drawMajorGridlines = true
True to draw gridlines for major axis ticks.
this.drawMajorTickMarks = true
True to draw tick marks for major axis ticks.
this.drawMinorGridlines = false
True to draw gridlines for minor ticks.
this.drawMinorTickMarks = true
True to draw tick marks for minor ticks.
this.drawSeries = function(options,
idx)
Redraws all or just one series on the plot.
+ + + +
this.edgeTolerance = -5
Number of pixels that the label must be away from an axis boundary in order to be drawn.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.escapeHtml = false
true to escape html in the box label.
this.escapeHtml = true
True to escape html in bubble label text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in legend text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in title text.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = true
true to escape html entities in the labels.
called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General3.html b/public/javascripts/jqplot/docs/index/General3.html new file mode 100644 index 0000000..031f05c --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General3.html @@ -0,0 +1,42 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
F
 fadeTooltip
 fill
 fillAlpha, Series
 fillAndStroke, Series
 fillAxis, Series
 fillBetween, jqPlot
 fillColor
 fillDownBody, $.jqplot.OHLCRenderer
 fillRect, $.jqplot.shapeRenderer
 fillStyle, $.jqplot.shapeRenderer
 fillToValue, Series
 fillToZero, Series
 fillUpBody, $.jqplot.OHLCRenderer
 followMouse, $.jqplot.Cursor
 fontFamily
 fontSize
 fontStretch
 fontWeight
 forceTickAt0, $.jqplot.LinearAxisRenderer
 forceTickAt100, $.jqplot.LinearAxisRenderer
 formatString
 formatter
 Functions
G
 get, $.jqplot.ThemeEngine
 getThemeNames, $.jqplot.ThemeEngine
 getThemes, $.jqplot.ThemeEngine
 GPL Version 2
 grid, jqPlot
 Grid
 gridLineColor, Grid
 gridLineWidth, Grid
 groups, $.jqplot.BarRenderer
H
 hideZeros, $.jqplot.PointLabels
 highlightAlpha, $.jqplot.BubbleRenderer
 highlightColor, $.jqplot.LineRenderer
 highlightColors
 highlightMouseDown
 highlightMouseOver
 hlc, $.jqplot.OHLCRenderer
 Hooks, $.jqplot
 HorizontalLine
 hubRadius, $.jqplot.MeterGaugeRenderer
+ +
true = fade in/out tooltip, flase = show/hide tooltip
this.fadeTooltip = true
true = fade in/out tooltip, flase = show/hide tooltip
this.fill = true
True to fill the bars.
this.fill = true
true or false, wether to fil the slices.
this.fill = true
true or false, wether to fill the areas.
True to fill area between bands [default: true].
this.fill = true
true or false, wether to fil the slices.
this.fill = false
whether to fill the shape.
this.fill = false
whether to fill the shape.
this.fill = false
true or false, wether to fill under lines or in bars.
this.fillAlpha
Alpha transparency to apply to the fill under the line.
this.fillAndStroke = false
If true will stroke the line (with color this.color) as well as fill under it.
this.fillAxis = 'y'
Either ‘x’ or ‘y’.
this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }
Fill between 2 line series in a plot.
css color spec for filled area.
this.fillColor
CSS color spec to use for fill under line.
this.fillDownBody = true
true to render a “down” day (close price lower than open price) with a filled candlestick body.
this.fillRect = false
true to draw shape as a filled rectangle.
this.fillStyle = '#999999'
css color spec for the fill style.
this.fillToValue = 0
fill a filled series to this value on the fill axis.
this.fillToZero = false
true will force bar and filled series to fill toward zero on the fill Axis.
this.fillUpBody = false
true to render an “up” day (close price greater than open price) with a filled candlestick body.
this.followMouse = false
Tooltip follows the mouse, it is not at a fixed location.
this.fontFamily
css spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
CSS spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
css spec for the font-family css attribute.
this.fontFamily
css font-family spec for the legend text.
this.fontFamily
css font-family spec for the text.
this.fontSize
css spec for the font-size css attribute.
this.fontSize = '11pt'
CSS spec for font size.
this.fontSize = '10pt'
CSS spec for font size.
this.fontSize
css spec for the font-size attribute.
this.fontSize
css font-size spec for the legend text.
this.fontSize
css font-size spec for the text.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontWeight = 'normal'
this.fontWeight = 'normal'
CSS spec for fontWeight
this.forceTickAt0 = false
This will ensure that there is always a tick mark at 0.
this.forceTickAt100 = false
This will ensure that there is always a tick mark at 100.
this.formatString = ''
string passed to the formatter.
this.formatString = ''
string passed to the formatter.
this.formatString = null
alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
this.formatString = ''
string passed to the formatter.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
+ + + +
$.jqplot.ThemeEngine.prototype.get = function(name)
Get and return the named theme or the active theme if no name given.
$.jqplot.ThemeEngine.prototype.getThemeNames = function()
Return the list of theme names in this manager in alpha-numerical order.
$.jqplot.ThemeEngine.prototype.getThemes = function()
Return a list of themes in alpha-numerical order by name.
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
this.grid = new Grid()
See Grid for grid specific options.
Object representing the grid on which the plot is drawn.
this.gridLineColor = '#cccccc'
color of the grid lines.
this.gridLineWidth = 1.0
width of the grid lines.
this.groups = 1
group bars into this many groups
+ + + +
this.hideZeros = false
true to not show a label for a value which is 0.
this.highlightAlpha = null
Alpha transparency to apply when highlighting bubble.
this.highlightColor = null
color to use when highlighting an area on a filled plot.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a bar.
this.highlightColors = []
An array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
array of colors to use when highlighting an area.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a bubble.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a area.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over an area on a filled plot.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight bubbles when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight area when moused over.
this.highlightMouseOver = true
True to highlight area on a filled plot when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.hlc = false
true if is a hi-low-close chart (no open price).
A straight horizontal line.
this.hubRadius = null
Radius of the hub at the bottom center of gauge which the needle attaches to.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General4.html b/public/javascripts/jqplot/docs/index/General4.html new file mode 100644 index 0000000..4798c87 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General4.html @@ -0,0 +1,46 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
I
 index, Series
 init, jqPlot
 innerDiameter, $.jqplot.DonutRenderer
 insertBreaks, $.jqplot.BlockRenderer
 intersectionThreshold, $.jqplot.Cursor
 interval, $.jqplot.LineRenderer
 intervalColors, $.jqplot.MeterGaugeRenderer
 intervalInnerRadius, $.jqplot.MeterGaugeRenderer
 intervalOuterRadius, $.jqplot.MeterGaugeRenderer
 intervals, $.jqplot.MeterGaugeRenderer
 Introduction
 isarc
 isMinorTick
J
 jqPlot
 jqPlot Charts
 jqPlot CSS Customization
 jqPlot Options
 jqPlot Pugin Hooks, $.jqplot
 jqPlot Usage
 jqplot.enhancedLegendRenderer.js
 jqplot.pyramidAxisRenderer.js
 jqplot.pyramidRenderer.js
L
 label
 labelHeightAdjust, $.jqplot.MeterGaugeRenderer
 labelOptions, Axis
 labelPosition
 labelRenderer, Axis
 labels
 labelsFromSeries, $.jqplot.PointLabels
 legend, jqPlot
 Legend
 Line
 lineCap
 lineJoin
 linePattern
 lineWidth
 lineWidthAdjust, $.jqplot.Highlighter
 location
 looseZoom, $.jqplot.Cursor
M
 makeGridData
 marginBottom, Legend
 marginLeft, Legend
 marginRight, Legend
 marginTop, Legend
 mark
 markerOptions, Series
 markerRenderer
 markSize
 max
 methods
 Methods, $.jqplot.BlockRenderer
 min
 minorTicks
 MIT License
 moveBlock, $.jqplot.BlockRenderer
 moveSeriesToBack, jqPlot
 moveSeriesToFront, jqPlot
+ +
this.index
0 based index of this series in the plot series array.
this.init = function(target,
data,
options)
sets the plot target, checks data and applies user options to plot.
this.innerDiameter = null
Inner diameter of the donut, auto calculated by default.
this.insertBreaks = true
true to turn spaces in data block label into html breaks br /.
this.intersectionThreshold = 2
pixel distance from data point or marker to consider cursor lines intersecting with point.
interval: '3%' }
User specified interval above and below line for bands [default: ‘3%’’].
this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]
Array of colors to use for the intervals.
this.intervalInnerRadius = null
Radius of the inner circle of the interval ring.
this.intervalOuterRadius = null
Radius of the outer circle of the interval ring.
this.intervals = []
Array of ranges to be drawn around the gauge.
jqPlot requires jQuery (1.4+ required for certain features).
this.isarc = false
wether the shadow is an arc or not.
this.isarc = false
wether the shadow is an arc or not.
this.isMinorTick = false
if this is a minor tick.
this.isMinorTick = false
if this is a minor tick.
+ + + +
Plot object returned by call to $.jqplot.
Pure JavaScript plotting plugin for jQuery.
Much of the styling of jqPlot is done by css.
This document is out of date.
+ + + +
this.label = ''
The text or html for the label.
this.label = ''
label for the axis.
this.label = null
A gauge label like ‘kph’ or ‘Volts’
this.label = ''
Label for the trend line to use in the legend.
this.label = null
Label for the axis
this.label = ''
Line label to use in the legend.
this.labelHeightAdjust = 0
Number of Pixels to offset the label up (-) or down (+) from its default position.
this.labelOptions = {}
Options passed to the label renderer.
this.labelPosition = 'auto'
‘auto’, ‘start’, ‘middle’ or ‘end’.
this.labelPosition = 'inside'
Where to position the label, either ‘inside’ or ‘bottom’.
this.labelRenderer = $.jqplot.AxisLabelRenderer
A class of a rendering engine for creating an axis label.
this.labels = []
array of arrays of labels, one array for each series.
this.labels = []
Array of labels to use.
this.labelsFromSeries = false
true to use labels within data point arrays.
this.legend = new Legend()
see $.jqplot.TableLegendRenderer
Legend object.
A straight line.
Type of ending placed on the line [‘round’, ‘butt’, ‘square’]
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
Canvas lineCap style at ends of line.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'round'
Canvas lineJoin style between segments of series.
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
Width of the line.
this.lineWidth = 2
width of line if areas are stroked and not filled.
this.lineWidth = 2
size of the line for non-filled markers.
this.lineWidth = 1.5
Width of the hi-low line and open/close ticks.
this.lineWidth = 1.5
width of the shadow line stroke.
this.lineWidth = 1.5
Width of the trend line.
this.lineWidth = 2.5
width of the line in pixels.
this.lineWidthAdjust = 2.5
Pixels to add to the lineWidth of the highlight.
this.location = 'n'
compass location where to position the label around the point.
this.location = 'ne'
Placement of the legend.
this.looseZoom = true
Will expand zoom range to provide more rounded tick values.
+ + + +
$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
$.jqplot.MekkoRenderer.prototype.makeGridData = function(data,
plot)
converts any arbitrary data values to grid coordinates and returns them.
this.marginBottom = null
CSS margin for the legend DOM element.
this.marginLeft = null
CSS margin for the legend DOM element.
this.marginRight = null
CSS margin for the legend DOM element.
this.marginTop = null
CSS margin for the legend DOM element.
this.mark = 'outside'
tick mark on the axis.
this.mark = 'outside'
tick mark on the axis.
this.markerOptions = {}
renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})
Renderer used to draw the marker of the highlighted point.
this.markerRenderer = {show:false}
Renderer to use to draw markers on the line.
this.markerRenderer = $.jqplot.MarkerRenderer
A class of a renderer which will draw marker (e.g.
this.markSize = 6
Length of the tick marks in pixels.
this.markSize = 4
Length of the tick marks in pixels.
this.max
Maximum value on the gauge.
this.max = null
maximum value of the axis (in data units, not pixels).
this.min
Minimum value on the gauge.
this.min = null
minimum value of the axis (in data units, not pixels).
this.minorTicks = 0
Number of ticks to add between “major” ticks.
this.minorTicks = 'auto'
Number of ticks to add between “major” ticks.
Copyright © 2009-2012 Chris Leonello
this.moveBlock = function (idx,
x,
y,
duration)
Moves an individual block.
this.moveSeriesToBack = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.
this.moveSeriesToFront = function (idx)
This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General5.html b/public/javascripts/jqplot/docs/index/General5.html new file mode 100644 index 0000000..05064f8 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General5.html @@ -0,0 +1,50 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
N
 name, $.jqplot.CanvasOverlay
 needlePad, $.jqplot.MeterGaugeRenderer
 needleThickness, $.jqplot.MeterGaugeRenderer
 negativeColor, Series
 neighborThreshold, Series
 newTheme, $.jqplot.ThemeEngine
 noDataIndicator, jqPlot
 numberColumns
 numberRows
 numberTicks, Axis
O
 objects, $.jqplot.CanvasOverlay
 offset, $.jqplot.shadowRenderer
 offsetBars
 openColor, $.jqplot.OHLCRenderer
 Options Tutorial
 Options Usage
P
 pad, Axis
 padding
 padMax, Axis
 padMin, Axis
 pegNeedle, $.jqplot.MeterGaugeRenderer
 placement, Legend
 position
 postDrawHooks, $.jqplot.$.jqplot
 postDrawSeriesHooks, $.jqplot.$.jqplot
 postDrawSeriesShadowHooks, $.jqplot.$.jqplot
 postInitHooks, $.jqplot.$.jqplot
 postParseOptionsHooks, $.jqplot.$.jqplot
 postParseSeriesOptionsHooks, $.jqplot.$.jqplot
 postSeriesInitHooks, $.jqplot.$.jqplot
 predraw, Legend
 preDrawHooks, $.jqplot.$.jqplot
 preDrawLegendHooks, $.jqplot.$.jqplot
 preDrawSeriesHooks, $.jqplot.$.jqplot
 preDrawSeriesShadowHooks, $.jqplot.$.jqplot
 prefix
 preInitHooks, $.jqplot.$.jqplot
 preParseOptionsHooks, $.jqplot.$.jqplot
 preParseSeriesOptionsHooks, $.jqplot.$.jqplot
 preSeriesInitHooks, $.jqplot.$.jqplot
 Properties
 pt2px
Q
 quickInit, jqPlot
R
 redraw, jqPlot
 reInitialize, jqPlot
 remove, $.jqplot.ThemeEngine
 rename, $.jqplot.ThemeEngine
 renderer
 rendererOptions
 replot, jqPlot
 resetAxesScale, jqPlot
 restoreOriginalSeriesOrder, jqPlot
 restorePreviousSeriesOrder, jqPlot
 ringColor, $.jqplot.MeterGaugeRenderer
 ringMargin, $.jqplot.DonutRenderer
 ringWidth, $.jqplot.MeterGaugeRenderer
 rowSpacing, Legend
+ +
Optional name for the overlay object.
this.needlePad = 6
Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
this.needleThickness = null
Maximum thickness the needle.
this.negativeColor
css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
this.neighborThreshold = 4
how close or far (in pixels) the cursor must be from a point marker to detect the point.
$.jqplot.ThemeEngine.prototype.newTheme = function(name,
obj)
Create a new theme based on the default theme, adding it the themeEngine.
Options to set up a mock plot with a data loading indicator if no data is specified.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberTicks
Desired number of ticks.
+ + + +
this.objects = []
this.offset = 1
Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
this.offsetBars = false
False will center bars on their y value.
this.openColor = null
color of the open price tick mark.
This document will help you understand how jqPlot’s options relate to the API documentation and the jqPlot object itself.
See Options Tutorial
+ + + +
this.pad = 1.2
Padding to extend the range above and below the data bounds.
this.padding = 20
padding between the donut and plot edges, legend, etc.
this.padding = {top: 20, right: 20, bottom: 20, left: 20}
padding between the funnel and plot edges, legend, etc.
this.padding = null
padding between the meterGauge and plot edges, auto calculated by default.
this.padding = 20
padding between the pie and plot edges, legend, etc.
this.padMax = null
Padding to extend the range above data bounds.
this.padMin = null
Padding to extend the range below data bounds.
this.pegNeedle = true
True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
this.placement = "insideGrid"
“insideGrid” places legend inside the grid area of the plot.
this.position = null
Position of axis.
called after plot draw.
called after each series is drawn.
called after series shadows are drawn.
called after initialization.
called after user options are parsed.
called after series related options are parsed.
called after series is initialized.
Wether to draw the legend before the series or not.
called before plot draw.
called before the legend is drawn.
called before each series is drawn.
called before series shadows are drawn.
this.prefix = ''
String to prepend to the tick label.
this.prefix = ''
String to prepend to the tick label.
called before initialization.
called before user options are parsed.
called before series related options are parsed.
called before series is initialized.
Properties
Axes options are specified within an axes object at the top level of the plot options like so:
These properties are specified at the top of the options object like so:
Properties will be assigned from a series array at the top level of the options.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
+ + + +
this.quickInit = function ()
Quick reinitialization plot for replotting.
+ + + +
this.redraw = function(clear)
Empties the plot target div and redraws the plot.
this.reInitialize = function (data,
opts)
reinitialize plot for replotting.
$.jqplot.ThemeEngine.prototype.remove = function(name)
Remove the given theme from the themeEngine.
$.jqplot.ThemeEngine.prototype.rename = function (oldName,
newName)
Rename a theme.
this.renderer = new $.jqplot.LineRenderer()
Renderer to use to draw the trend line.
this.renderer = $.jqplot.LinearAxisRenderer
A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
this.renderer = $.jqplot.CanvasGridRenderer
Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
this.renderer = $.jqplot.LineRenderer
A class of a renderer which will draw the series, see $.jqplot.LineRenderer.
this.renderer = $.jqplot.DivTitleRenderer
A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
this.rendererOptions = {marker:{show:false}}
Options to pass to the line renderer.
this.rendererOptions = {}
renderer specific options.
this.rendererOptions = {}
Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.rendererOptions = {}
Options to pass on to the renderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.replot = function(options)
Does a reinitialization of the plot followed by a redraw.
this.resetAxesScale = function(axes,
options)
Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.
this.restoreOriginalSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.
this.restorePreviousSeriesOrder = function ()
This method requires jQuery 1.4+ Restore the series canvas order to its previous state.
this.ringColor = "#BBC6D0"
color of the outer ring, hub, and needle of the gauge.
this.ringMargin = null
pixel distance between rings, or multiple series in a donut plot.
this.ringWidth = null
width of the ring around the gauge.
this.rowSpacing = '0.5em'
css padding-top spec for the rows in the legend.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General6.html b/public/javascripts/jqplot/docs/index/General6.html new file mode 100644 index 0000000..9070e89 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General6.html @@ -0,0 +1,34 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
S
 scaleToHiddenSeries, Axis
 sectionMargin, $.jqplot.FunnelRenderer
 series, jqPlot
 Series
 seriesColors, jqPlot
 seriesDefaults, jqPlot
 seriesLabelIndex, $.jqplot.PointLabels
 seriesToggle
 seriesToggleReplot
 setGridData
 shadow
 shadowAlpha
 shadowAngle
 shadowColor, Grid
 shadowDepth
 shadowOffset
 shadowRenderer, $.jqplot.MarkerRenderer
 shadowWidth, Grid
 shapeRenderer, $.jqplot.MarkerRenderer
 show
 showBorders, $.jqplot.MekkoRenderer
 showCursorLegend, $.jqplot.Cursor
 showDataLabels
 showGridline
 showHorizontalLine, $.jqplot.Cursor
 showLabel
 showLabels
 showLine, Series
 showLines, $.jqplot.LineRenderer
 showMark
 showMarker
 showMinorTicks, Axis
 showSwatch, Legend
 showTickLabels, $.jqplot.MeterGaugeRenderer
 showTickMarks, Axis
 showTicks
 showTooltip
 showTooltipDataPosition, $.jqplot.Cursor
 showTooltipGridPosition, $.jqplot.Cursor
 showTooltipOutsideZoom, $.jqplot.Cursor
 showTooltipPrecision, $.jqplot.CanvasOverlay
 showTooltipUnitPosition, $.jqplot.Cursor
 showVerticalLine, $.jqplot.Cursor
 size
 sizeAdjust, $.jqplot.Highlighter
 sliceMargin
 smooth, $.jqplot.LineRenderer
 sortData, jqPlot
 sortMergedLabels, $.jqplot.CategoryAxisRenderer
 stackedValue, $.jqplot.PointLabels
 stackSeries, jqPlot
 start, Line
 startAngle
 stop, Line
 strokeRect, $.jqplot.shapeRenderer
 strokeStyle, $.jqplot.shapeRenderer
 style
 suffix, $.jqplot.AxisTickRenderer
 synchronizeHighlight
 syncTicks, Axis
+ +
this.scaleToHiddenSeries = false
True to include hidden series when computing axes bounds and scaling.
this.sectionMargin = 6
spacing between funnel sections in pixels.
this.series = []
Array of series object options.
An individual data series object.
this.seriesColors = $.jqplot.config.defaultColors
Ann array of CSS color specifications that will be applied, in order, to the series in the plot.
seriesDefaults: {}, series:[] }
default options that will be applied to all series.
this.seriesLabelIndex = null
array index for location of labels within data point arrays.
this.seriesToggle = 'normal'
false to not enable series on/off toggling on the legend.
this.seriesToggleReplot = false
True to replot the chart after toggling series on/off.
$.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
$.jqplot.MekkoRenderer.prototype.setGridData = function(plot)
converts the user data values to grid coordinates and stores them in the gridData array.
wether or not to draw a shadow on the line
this.shadow = true
wether or not to draw a shadow on the line
this.shadow = true
true or false, wether or not to show the shadow.
this.shadow = true
wether to show a shadow behind the grid.
this.shadowAlpha = 0.08
transparency of the shadow (0 = transparent, 1 = opaque)
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
Alpha transparency of the shadow.
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = '0.1'
Alpha channel transparency of shadow.
Shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowAngle = 45
Angle of the shadow on the trend line.
this.shadowAngle = 45
shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowColor = null
an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 4
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
number of strokes to make of the shadow.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1.0
pixel offset for each stroke of the shadow.
this.shadowOffset = 1.5
Offset of each shadow stroke from the border in pixels
this.shadowOffset = 1.25
Shadow offset from line in pixels
this.shadowRenderer = new $.jqplot.ShadowRenderer()
Renderer that will draws the shadows on the marker.
this.shadowWidth = 3
width of the stoke for the shadow
this.shapeRenderer = new $.jqplot.ShapeRenderer()
Renderer that will draw the marker.
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
true to show (draw), false to not draw.
this.show = $.jqplot.config.enablePlugins
wether to show the cursor or not.
this.show = $.jqplot.config.enablePlugins
true to show the highlight.
true to show the bands.
this.show = true
wether or not to show the marker.
this.show = $.jqplot.config.enablePlugins
show the labels or not.
this.show = $.jqplot.config.enablePlugins
Wether or not to show the trend line.
this.show = false
Wether to display the axis on the graph.
this.show = false
Wether to display the legend on the graph.
this.show = true
wether or not to draw the series.
this.show = true
wether or not to show the title
this.showBorders = true
True to draw borders lines between areas on the chart.
this.showCursorLegend = false
Replace the plot legend with an enhanced legend displaying intersection information.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showHorizontalLine = false
draw a horizontal line across the plot which follows the cursor.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
true to show the axis label.
this.showLabel = true
true to show label for this series in the legend.
this.showLabels = true
True to show labels on bubbles (if any), false to not show.
this.showLabels = true
true to show the label text on the legend.
this.showLine = true
wether to actually draw the line or not.
True to show lines at top and bottom of bands [default: false].
this.showMark = true
wether or not to show the mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showMarker = true
true to show the marker
this.showMarker = true
wether or not to show the markers at the data points.
this.showMinorTicks = true
Wether or not to show minor ticks.
this.showSwatches = true
true to show the color swatches on the legend.
this.showTickLabels = true
true to show tick labels next to ticks.
this.showTickMarks = true
Wether to show the tick marks (line crossing grid) or not.
this.showTicks = true
true to show ticks around gauge.
this.showTicks = true
Wether to show the ticks (both marks and labels) or not.
Show a tooltip with data point values.
this.showTooltip = true
show a cursor position tooltip.
this.showTooltip = true
Show a tooltip with data point values.
this.showTooltipDataPosition = false
Used with showVerticalLine to show intersecting data points in the tooltip.
this.showTooltipGridPosition = false
show the grid pixel coordinates of the mouse.
this.showTooltipOutsideZoom = false
True will keep updating the tooltip when zooming of the grid.
Controls how close to line cursor must be to show tooltip.
this.showTooltipUnitPosition = true
show the unit (data) coordinates of the mouse.
this.showVerticalLine = false
draw a vertical line across the plot which follows the cursor.
this.size = 4
Length of the tick beyond the grid in pixels.
this.size = 9.0
Size of the marker (diameter or circle, length of edge of square, etc.)
this.sizeAdjust = 5
Pixels to add to the overall size of the highlight.
this.sliceMargin = 0
angular spacing between donut slices in degrees.
this.sliceMargin = 0
angular spacing between pie slices in degrees.
this.renderer.smooth = false
True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
this.sortData = true
false to not sort the data passed in by the user.
this.sortMergedLabels = false
True to sort tick labels when labels are created by merging x axis values from multiple series.
this.stackedValue = false
true to display value as stacked in a stacked plot.
this.stackSeries = false
true or false, creates a stack or “mountain” plot.
[x, y] coordinates for the start of the line.
this.startAngle = 0
Angle to start drawing donut in degrees.
this.startAngle = 0
Angle to start drawing pie in degrees.
stop: [] }
[x, y] coordinates for the end of the line.
this.strokeRect = false
true to draw shape as a stroked rectangle.
this.strokeStyle = '#999999'
css color spec for the stoke style
this.style = 'crosshair'
CSS spec for cursor style
this.style = 'filledCircle'
One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
this.suffix = ''
String to append to the tick label.
this.synchronizeHighlight = false
Index of another series to highlight when this series is highlighted.
this.syncTicks = null
true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/General7.html b/public/javascripts/jqplot/docs/index/General7.html new file mode 100644 index 0000000..3eeb242 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/General7.html @@ -0,0 +1,58 @@ + + +Index + + + + + + + + + +
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
T
 text, Title
 textAlign, Title
 textColor
 themes, $.jqplot.ThemeEngine
 thickness, $.jqplot.DonutRenderer
 tickColor, $.jqplot.MeterGaugeRenderer
 tickInset
 tickInterval, Axis
 tickLength, $.jqplot.OHLCRenderer
 tickMode, $.jqplot.MekkoAxisRenderer
 tickOptions, Axis
 tickPadding, $.jqplot.MeterGaugeRenderer
 tickRenderer
 ticks
 tickSpacing
 title, jqPlot
 Title
 tooltipAxes, $.jqplot.Highlighter
 tooltipAxisGroups, $.jqplot.Cursor
 tooltipFadeSpeed
 tooltipFormatString
 tooltipLocation
 tooltipOffset
 transposedData, $.jqplot.BarRenderer
 type, $.jqplot.Trendline
U
 upBodyColor, $.jqplot.OHLCRenderer
 Usage
 useAxesFormatters
 useNegativeColors, Series
 useSeriesColor, Axis
V
 varyBarColor, $.jqplot.BarRenderer
 varyBlockColors, $.jqplot.BlockRenderer
 varyBubbleColors, $.jqplot.BubbleRenderer
 Version
 VerticalLine
W
 waterfall, $.jqplot.BarRenderer
 wickColor, $.jqplot.OHLCRenderer
 widthRatio, $.jqplot.FunnelRenderer
X
 xaxis
 xmax, HorizontalLine
 xmin, HorizontalLine
 xoffset, Legend
 xpadding, $.jqplot.PointLabels
Y
 y, HorizontalLine
 yaxis
 yoffset, Legend
 ypadding, $.jqplot.PointLabels
 yvalues, $.jqplot.Highlighter
Z
 zoom, $.jqplot.Cursor
 zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
+ +
this.text = text
text of the title;
this.textAlign
css text-align spec for the text.
this.textColor
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor
css color spec for the legend text.
this.textColor
css color spec for the text.
this.themes = {}
hash of themes managed by the theme engine.
this.thickness = null
thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
this.tickColor = "989898"
color of the tick marks around the gauge.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInterval
number of units between ticks.
this.tickLength = 'auto'
length of the line in pixels indicating open and close price.
this.tickMode
How to space the ticks on the axis.
this.tickOptions = {}
Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
this.tickPadding = null
padding of the tick marks to the outer ring and the tick labels to marks.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.tickRenderer = $.jqplot.AxisTickRenderer
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.ticks = []
Array of tick values.
this.ticks = []
1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
this.tickSpacing = 30
Degrees between ticks.
this.tickSpacing = 75
Approximate pixel spacing between ticks on graph.
this.title = new Title()
Title object.
Plot Title object.
this.tooltipAxes = 'both'
Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
this.tooltipAxisGroups = []
Show position for the specified axes.
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
this.tooltipFadeSpeed = "fast"
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipFormatString: '%d, %d' }
Format string passed the x and y values of the cursor on the line.
this.tooltipFormatString = '%.4P, %.4P'
sprintf format string for the tooltip.
this.tooltipFormatString = '%.5P'
sprintf format string for the tooltip.
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
this.tooltipLocation = 'se'
Where to position tooltip.
this.tooltipLocation = 'nw'
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
Pixel offset of tooltip from the highlight.
this.tooltipOffset = 6
Pixel offset of tooltip from the grid boudaries or cursor center.
this.tooltipOffset = 2
Pixel offset of tooltip from the highlight.
this.transposedData = true
NOT IMPLEMENTED YET.
this.type = 'linear'
Either ‘exponential’, ‘exp’, or ‘linear’.
+ + + +
this.upBodyColor = null
Color of candlestick body of an “up” day.
See jqPlot Usage
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useNegativeColors = true
true to color negative values differently in filled and bar charts.
this.useSeriesColor = false
Use the color of the first series associated with this axis for the tick marks and line bordering this axis.
+ + + +
this.varyBarColor = false
true to color each bar of a series separately rather than have every bar of a given series the same color.
this.varyBlockColors = false
true to vary the color of each block in this series according to the seriesColors array.
this.varyBubbleColors = true
True to vary the color of each bubble in this series according to the seriesColors array.
version: 1.0.4 revision: 1121
A straight vertical line.
+ + + +
this.waterfall = false
true to enable waterfall plot.
this.wickColor = null
color of the hi-lo line thorugh the candlestick body.
this.widthRatio = 0.2
The ratio of the width of the top of the funnel to the bottom.
+ + + +
X axis to use for positioning/scaling the line.
this.xaxis = 'xaxis'
which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
x value for the end of the line, null to scale to axis max.
x value for the start of the line, null to scale to axis min.
this.xoffset = 0
DEPRECATED.
this.xpadding = 6
horizontal padding in pixels between point and label
+ + + +
y value to position the line
Y axis to use for positioning/scaling the line.
this.yaxis = 'yaxis'
which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
this.yoffset = 0
DEPRECATED.
this.ypadding = 6
vertical padding in pixels between point and label
this.yvalues = 1
Number of y values to expect in the data point array.
+ + + +
this.zoom = false
Enable plot zooming.
$.jqplot.Cursor.zoomProxy = function(targetPlot,
controllerPlot)
links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Hooks.html b/public/javascripts/jqplot/docs/index/Hooks.html new file mode 100644 index 0000000..8b1a49f --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Hooks.html @@ -0,0 +1,46 @@ + + +Hook Index + + + + + + + + + +
Hook Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
A
 addLegendRowHooks, $.jqplot.$.jqplot
E
 eventListenerHooks, $.jqplot.$.jqplot
J
 jqPlot Pugin Hooks, $.jqplot
P
 postDrawHooks, $.jqplot.$.jqplot
 postDrawSeriesHooks, $.jqplot.$.jqplot
 postDrawSeriesShadowHooks, $.jqplot.$.jqplot
 postInitHooks, $.jqplot.$.jqplot
 postParseOptionsHooks, $.jqplot.$.jqplot
 postParseSeriesOptionsHooks, $.jqplot.$.jqplot
 postSeriesInitHooks, $.jqplot.$.jqplot
 preDrawHooks, $.jqplot.$.jqplot
 preDrawLegendHooks, $.jqplot.$.jqplot
 preDrawSeriesHooks, $.jqplot.$.jqplot
 preDrawSeriesShadowHooks, $.jqplot.$.jqplot
 preInitHooks, $.jqplot.$.jqplot
 preParseOptionsHooks, $.jqplot.$.jqplot
 preParseSeriesOptionsHooks, $.jqplot.$.jqplot
 preSeriesInitHooks, $.jqplot.$.jqplot
+ +
called at the end of legend draw, so plugins can add rows to the legend table.
+ + + +
called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.
+ + + + + + + +
called after plot draw.
called after each series is drawn.
called after series shadows are drawn.
called after initialization.
called after user options are parsed.
called after series related options are parsed.
called after series is initialized.
called before plot draw.
called before the legend is drawn.
called before each series is drawn.
called before series shadows are drawn.
called before initialization.
called before user options are parsed.
called before series related options are parsed.
called before series is initialized.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Properties.html b/public/javascripts/jqplot/docs/index/Properties.html new file mode 100644 index 0000000..24ad3fd --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Properties.html @@ -0,0 +1,42 @@ + + +Property Index + + + + + + + + + +
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
A
 activeTheme, $.jqplot.ThemeEngine
 alignTicks, $.jqplot.LinearAxisRenderer
 alpha, $.jqplot.shadowRenderer
 angle
 animate, jqPlot
 animateReplot, jqPlot
 autoscale, Axis
 autoscaleBubbles, $.jqplot.BubbleRenderer
 autoscaleMultiplier, $.jqplot.BubbleRenderer
 autoscalePointsFactor, $.jqplot.BubbleRenderer
 axes, jqPlot
 axesDefaults, jqPlot
 axisDefaults, $.jqplot.LogAxisRenderer
B
 background
 bandData, $.jqplot.LineRenderer
 barDirection, $.jqplot.BarRenderer
 barLabelOptions, $.jqplot.MekkoAxisRenderer
 barLabelRenderer, $.jqplot.MekkoAxisRenderer
 barLabels, $.jqplot.MekkoAxisRenderer
 barMargin, $.jqplot.BarRenderer
 barPadding
 barWidth, $.jqplot.BarRenderer
 baselineColor
 baselineWidth
 bodyWidth, $.jqplot.OHLCRenderer
 border, Legend
 borderColor
 borderWidth
 breakOnNull, Series
 breakPoints, $.jqplot.LinearAxisRenderer
 breakTickLabel, $.jqplot.LinearAxisRenderer
 bringSeriesToFront, $.jqplot.Highlighter
 bubbleAlpha, $.jqplot.BubbleRenderer
 bubbleGradients, $.jqplot.BubbleRenderer
C
 candleStick, $.jqplot.OHLCRenderer
 clearRect, $.jqplot.shapeRenderer
 clickReset, $.jqplot.Cursor
 closeColor, $.jqplot.OHLCRenderer
 color
 constrainOutsideZoom, $.jqplot.Cursor
 constrainSmoothing, $.jqplot.LineRenderer
 constrainTo, $.jqplot.Dragable
 constrainZoomTo, $.jqplot.Cursor
 css, $.jqplot.BlockRenderer
 cursorLegendFormatString, $.jqplot.Cursor
+ +
this.activeTheme=null
Pointer to currently active theme
this.alignTicks = false
true to align tick marks across opposed axes such as from the y2axis to yaxis.
this.alpha = 0.07
alpha transparency of shadow stroke.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 0
angle of text, measured clockwise from x axis.
this.angle = 45
Angle of the shadow in degrees.
this.animate = false
True to animate the series on initial plot draw (renderer dependent).
this.animateReplot = false
True to animate series after a call to the replot() method.
this.autoscale = false
DEPRECATED the default scaling algorithm produces superior results.
this.autoscaleBubbles = true
True to scale the bubble radius based on plot size.
this.autoscaleMultiplier = 1.0
Multiplier the bubble size if autoscaleBubbles is true.
this.autoscalePointsFactor = -0.07
Factor which decreases bubble size based on how many bubbles on on the chart.
this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}
up to 4 axes are supported, each with it’s own options, See Axis for axis specific options.
default options that will be applied to all axes.
Default properties which will be applied directly to the series.
+ + + +
this.background = "#efefef"
background color of the inside of the gauge.
this.background = '#fffdf6'
css spec for the background color.
this.background
css spec for the background of the legend box.
this.renderer.bandData = []
Data used to draw error bands or confidence intervals above/below a line.
this.barDirection = 'vertical'
‘vertical’ = up and down bars, ‘horizontal’ = side to side bars
this.barLabelOptions = {}
options object to pass to the bar label renderer.
this.barLabelRenderer = $.jqplot.AxisLabelRenderer
renderer to use to draw labels under each bar.
this.barLabels = this.barLabels || []
array of labels to put under each bar.
this.barMargin = 10
Number of pixels between groups of bars at adjacent axis values.
this.barPadding = 10
this.barPadding = 8
Number of pixels between adjacent bars at the same axis value.
this.barWidth = null
Width of the bar in pixels (auto by devaul).
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineColor = null
CSS color spec for the baseline.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.baselineWidth = null
width of the baseline in pixels.
this.bodyWidth = 'auto'
width of the candlestick body in pixels.
this.border
css spec for the border around the legend box.
this.borderColor = null
color of the borders between areas on the chart
this.borderColor = null
color of the border adjacent to the axis.
this.borderColor = '#999999'
css spec for the color of the grid border.
this.borderWidth = null
width of line stroked at the border of the axis.
this.borderWidth = 2.0
width of the border in pixels.
this.breakOnNull = false
Wether line segments should be be broken at null value.
this.breakPoints = null
EXPERIMENTAL!! 
this.breakTickLabel = "&asymp
Label to use at the axis break if breakPoints are specified.
this.bringSeriesToFront = false
This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.
this.bubbleAlpha = 1.0
Alpha transparency to apply to all bubbles in this series.
this.bubbleGradients = false
True to color the bubbles with gradient fills instead of flat colors.
+ + + +
this.candleStick = false
true to render chart as candleStick.
this.clearRect = false
true to cear a rectangle.
this.clickReset = false
Will reset plot zoom if single click on plot without drag.
this.closeColor = null
color of the close price tick mark.
color of the line
this.color
CSS color spec for the dragged point (and adjacent line segment or bar).
color of lines at top and bottom of bands [default: series color].
this.color = '#666666'
color of marker.
this.color = '#666666'
CSS color spec for the trend line.
this.color
css color spec for the series
this.constrainOutsideZoom = true
True to limit actual zoom area to edges of grid, even when zooming outside of plot area.
this.renderer.constrainSmoothing = true
True to use a more accurate smoothing algorithm that will not overshoot any data points.
this.constrainTo = 'none'
Constrain dragging motion to an axis or to none.
this.constrainZoomTo = 'none'
‘none’, ‘x’ or ‘y’
this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}
default css styles that will be applied to all data blocks.
this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString
Format string used in the cursor legend.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Properties2.html b/public/javascripts/jqplot/docs/index/Properties2.html new file mode 100644 index 0000000..60336a3 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Properties2.html @@ -0,0 +1,42 @@ + + +Property Index + + + + + + + + + +
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
D
 dashPattern
 data, jqPlot
 dataLabelCenterOn, $.jqplot.PieRenderer
 dataLabelFormatString
 dataLabelNudge
 dataLabelPositionFactor
 dataLabels
 dataLabelThreshold
 dataRenderer, jqPlot
 dataRendererOptions, jqPlot
 dblClickReset, $.jqplot.Cursor
 defaultAxisStart, jqPlot
 depth, $.jqplot.shadowRenderer
 diameter
 disableIEFading
 disableStack, Series
 downBodyColor, $.jqplot.OHLCRenderer
 drawBaseline
 drawBorder, Grid
 drawGridlines, Grid
 drawMajorGridlines, Axis
 drawMajorTickMarks, Axis
 drawMinorGridlines, Axis
 drawMinorTickMarks, Axis
E
 edgeTolerance, $.jqplot.PointLabels
 enableFontSupport
 escapeHtml
 escapeHTML
F
 fadeTooltip
 fill
 fillAlpha, Series
 fillAndStroke, Series
 fillAxis, Series
 fillBetween, jqPlot
 fillColor
 fillDownBody, $.jqplot.OHLCRenderer
 fillRect, $.jqplot.shapeRenderer
 fillStyle, $.jqplot.shapeRenderer
 fillToValue, Series
 fillToZero, Series
 fillUpBody, $.jqplot.OHLCRenderer
 followMouse, $.jqplot.Cursor
 fontFamily
 fontSize
 fontStretch
 fontWeight
 forceTickAt0, $.jqplot.LinearAxisRenderer
 forceTickAt100, $.jqplot.LinearAxisRenderer
 formatString
 formatter
+ +
dashPattern: [8,8] }
Array of line, space settings in pixels.
dashPattern: [8,8] }
Array of line, space settings in pixels.
this.data = []
user’s data.
this.dataLabelCenterOn = true
True to center the data label at its position.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelFormatString = null
Format string for data labels.
this.dataLabelNudge = 0
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelNudge = 2
Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
this.dataLabelPositionFactor = 0.4
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabelPositionFactor = 0.52
A Multiplier (0-1) of the pie radius which controls position of label on slice.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabels = 'percent'
Either ‘label’, ‘value’, ‘percent’ or an array of labels to place on the pie slices.
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
this.dataLabelThreshold = 3
Threshhold in percentage (0-100) of pie area, below which no label will be displayed.
this.dataRenderer
A callable which can be used to preprocess data passed into the plot.
this.dataRendererOptions
Options that will be passed to the dataRenderer.
this.dblClickReset = true
Will reset plot zoom if double click on plot without drag.
this.defaultAxisStart = 1
1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.
this.depth = 3
how many times the shadow is stroked.
this.diameter = null
Outer diameter of the donut, auto computed by default
this.diameter = null
Outer diameter of the meterGauge, auto computed by default
this.diameter = null
Outer diameter of the pie, auto computed by default
this.disableIEFading = true
true to toggle series with a show/hide method only and not allow fading in/out.
this.disableStack = false
true to not stack this series with other series in the plot.
this.downBodyColor = null
Color of candlestick body on a “down” day.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBaseline = true
True to draw the axis baseline.
this.drawBorder = true
True to draw border around grid.
this.drawGridlines = true
wether to draw the gridlines on the plot.
this.drawMajorGridlines = true
True to draw gridlines for major axis ticks.
this.drawMajorTickMarks = true
True to draw tick marks for major axis ticks.
this.drawMinorGridlines = false
True to draw gridlines for minor ticks.
this.drawMinorTickMarks = true
True to draw tick marks for minor ticks.
+ + + +
this.edgeTolerance = -5
Number of pixels that the label must be away from an axis boundary in order to be drawn.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.enableFontSupport = true
true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
this.escapeHtml = false
true to escape html in the box label.
this.escapeHtml = true
True to escape html in bubble label text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in legend text.
this.escapeHtml = false
True to escape special characters with their html entity equivalents in title text.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = false
true to escape HTML entities in the label.
this.escapeHTML = true
true to escape html entities in the labels.
+ + + +
true = fade in/out tooltip, flase = show/hide tooltip
this.fadeTooltip = true
true = fade in/out tooltip, flase = show/hide tooltip
this.fill = true
True to fill the bars.
this.fill = true
true or false, wether to fil the slices.
this.fill = true
true or false, wether to fill the areas.
True to fill area between bands [default: true].
this.fill = true
true or false, wether to fil the slices.
this.fill = false
whether to fill the shape.
this.fill = false
whether to fill the shape.
this.fill = false
true or false, wether to fill under lines or in bars.
this.fillAlpha
Alpha transparency to apply to the fill under the line.
this.fillAndStroke = false
If true will stroke the line (with color this.color) as well as fill under it.
this.fillAxis = 'y'
Either ‘x’ or ‘y’.
this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }
Fill between 2 line series in a plot.
css color spec for filled area.
this.fillColor
CSS color spec to use for fill under line.
this.fillDownBody = true
true to render a “down” day (close price lower than open price) with a filled candlestick body.
this.fillRect = false
true to draw shape as a filled rectangle.
this.fillStyle = '#999999'
css color spec for the fill style.
this.fillToValue = 0
fill a filled series to this value on the fill axis.
this.fillToZero = false
true will force bar and filled series to fill toward zero on the fill Axis.
this.fillUpBody = false
true to render an “up” day (close price greater than open price) with a filled candlestick body.
this.followMouse = false
Tooltip follows the mouse, it is not at a fixed location.
this.fontFamily
css spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
CSS spec for the font-family css attribute.
this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'
css spec for the font-family css attribute.
this.fontFamily
css font-family spec for the legend text.
this.fontFamily
css font-family spec for the text.
this.fontSize
css spec for the font-size css attribute.
this.fontSize = '11pt'
CSS spec for font size.
this.fontSize = '10pt'
CSS spec for font size.
this.fontSize
css spec for the font-size attribute.
this.fontSize
css font-size spec for the legend text.
this.fontSize
css font-size spec for the text.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontStretch = 1.0
Multiplier to condense or expand font width.
this.fontWeight = 'normal'
this.fontWeight = 'normal'
CSS spec for fontWeight
this.forceTickAt0 = false
This will ensure that there is always a tick mark at 0.
this.forceTickAt100 = false
This will ensure that there is always a tick mark at 100.
this.formatString = ''
string passed to the formatter.
this.formatString = ''
string passed to the formatter.
this.formatString = null
alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.
this.formatString = ''
string passed to the formatter.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
this.formatter = $.jqplot.DefaultTickFormatter
A class of a formatter for the tick text.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Properties3.html b/public/javascripts/jqplot/docs/index/Properties3.html new file mode 100644 index 0000000..a354933 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Properties3.html @@ -0,0 +1,46 @@ + + +Property Index + + + + + + + + + +
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
G
 grid, jqPlot
 gridLineColor, Grid
 gridLineWidth, Grid
 groups, $.jqplot.BarRenderer
H
 hideZeros, $.jqplot.PointLabels
 highlightAlpha, $.jqplot.BubbleRenderer
 highlightColor, $.jqplot.LineRenderer
 highlightColors
 highlightMouseDown
 highlightMouseOver
 hlc, $.jqplot.OHLCRenderer
 hubRadius, $.jqplot.MeterGaugeRenderer
I
 index, Series
 innerDiameter, $.jqplot.DonutRenderer
 insertBreaks, $.jqplot.BlockRenderer
 intersectionThreshold, $.jqplot.Cursor
 interval, $.jqplot.LineRenderer
 intervalColors, $.jqplot.MeterGaugeRenderer
 intervalInnerRadius, $.jqplot.MeterGaugeRenderer
 intervalOuterRadius, $.jqplot.MeterGaugeRenderer
 intervals, $.jqplot.MeterGaugeRenderer
 isarc
 isMinorTick
L
 label
 labelHeightAdjust, $.jqplot.MeterGaugeRenderer
 labelOptions, Axis
 labelPosition
 labelRenderer, Axis
 labels
 labelsFromSeries, $.jqplot.PointLabels
 legend, jqPlot
 lineCap
 lineJoin
 linePattern
 lineWidth
 lineWidthAdjust, $.jqplot.Highlighter
 location
 looseZoom, $.jqplot.Cursor
+ +
this.grid = new Grid()
See Grid for grid specific options.
this.gridLineColor = '#cccccc'
color of the grid lines.
this.gridLineWidth = 1.0
width of the grid lines.
this.groups = 1
group bars into this many groups
+ + + +
this.hideZeros = false
true to not show a label for a value which is 0.
this.highlightAlpha = null
Alpha transparency to apply when highlighting bubble.
this.highlightColor = null
color to use when highlighting an area on a filled plot.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a bar.
this.highlightColors = []
An array of colors to use when highlighting a slice.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightColors = []
array of colors to use when highlighting an area.
this.highlightColors = []
an array of colors to use when highlighting a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a bubble.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a area.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over an area on a filled plot.
this.highlightMouseDown = false
True to highlight when a mouse button is pressed over a slice.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight bubbles when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.highlightMouseOver = true
True to highlight area when moused over.
this.highlightMouseOver = true
True to highlight area on a filled plot when moused over.
this.highlightMouseOver = true
True to highlight slice when moused over.
this.hlc = false
true if is a hi-low-close chart (no open price).
this.hubRadius = null
Radius of the hub at the bottom center of gauge which the needle attaches to.
+ + + +
this.index
0 based index of this series in the plot series array.
this.innerDiameter = null
Inner diameter of the donut, auto calculated by default.
this.insertBreaks = true
true to turn spaces in data block label into html breaks br /.
this.intersectionThreshold = 2
pixel distance from data point or marker to consider cursor lines intersecting with point.
interval: '3%' }
User specified interval above and below line for bands [default: ‘3%’’].
this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"]
Array of colors to use for the intervals.
this.intervalInnerRadius = null
Radius of the inner circle of the interval ring.
this.intervalOuterRadius = null
Radius of the outer circle of the interval ring.
this.intervals = []
Array of ranges to be drawn around the gauge.
this.isarc = false
wether the shadow is an arc or not.
this.isarc = false
wether the shadow is an arc or not.
this.isMinorTick = false
if this is a minor tick.
this.isMinorTick = false
if this is a minor tick.
+ + + +
this.label = ''
The text or html for the label.
this.label = ''
label for the axis.
this.label = null
A gauge label like ‘kph’ or ‘Volts’
this.label = ''
Label for the trend line to use in the legend.
this.label = null
Label for the axis
this.label = ''
Line label to use in the legend.
this.labelHeightAdjust = 0
Number of Pixels to offset the label up (-) or down (+) from its default position.
this.labelOptions = {}
Options passed to the label renderer.
this.labelPosition = 'auto'
‘auto’, ‘start’, ‘middle’ or ‘end’.
this.labelPosition = 'inside'
Where to position the label, either ‘inside’ or ‘bottom’.
this.labelRenderer = $.jqplot.AxisLabelRenderer
A class of a rendering engine for creating an axis label.
this.labels = []
array of arrays of labels, one array for each series.
this.labels = []
Array of labels to use.
this.labelsFromSeries = false
true to use labels within data point arrays.
this.legend = new Legend()
see $.jqplot.TableLegendRenderer
Type of ending placed on the line [‘round’, ‘butt’, ‘square’]
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
how ends of the shadow line are rendered.
this.lineCap = 'round'
Canvas lineCap style at ends of line.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'miter'
How line segments of the shadow are joined.
this.lineJoin = 'round'
Canvas lineJoin style between segments of series.
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
this.linePattern = 'solid'
line pattern ‘dashed’, ‘dotted’, ‘solid’, some combination of ‘-’ and ‘.’
Width of the line.
this.lineWidth = 2
width of line if areas are stroked and not filled.
this.lineWidth = 2
size of the line for non-filled markers.
this.lineWidth = 1.5
Width of the hi-low line and open/close ticks.
this.lineWidth = 1.5
width of the shadow line stroke.
this.lineWidth = 1.5
Width of the trend line.
this.lineWidth = 2.5
width of the line in pixels.
this.lineWidthAdjust = 2.5
Pixels to add to the lineWidth of the highlight.
this.location = 'n'
compass location where to position the label around the point.
this.location = 'ne'
Placement of the legend.
this.looseZoom = true
Will expand zoom range to provide more rounded tick values.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Properties4.html b/public/javascripts/jqplot/docs/index/Properties4.html new file mode 100644 index 0000000..f802eb5 --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Properties4.html @@ -0,0 +1,50 @@ + + +Property Index + + + + + + + + + +
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
M
 marginBottom, Legend
 marginLeft, Legend
 marginRight, Legend
 marginTop, Legend
 mark
 markerOptions, Series
 markerRenderer
 markSize
 max
 min
 minorTicks
N
 name, $.jqplot.CanvasOverlay
 needlePad, $.jqplot.MeterGaugeRenderer
 needleThickness, $.jqplot.MeterGaugeRenderer
 negativeColor, Series
 neighborThreshold, Series
 noDataIndicator, jqPlot
 numberColumns
 numberRows
 numberTicks, Axis
O
 objects, $.jqplot.CanvasOverlay
 offset, $.jqplot.shadowRenderer
 offsetBars
 openColor, $.jqplot.OHLCRenderer
P
 pad, Axis
 padding
 padMax, Axis
 padMin, Axis
 pegNeedle, $.jqplot.MeterGaugeRenderer
 placement, Legend
 position
 predraw, Legend
 prefix
 pt2px
R
 renderer
 rendererOptions
 ringColor, $.jqplot.MeterGaugeRenderer
 ringMargin, $.jqplot.DonutRenderer
 ringWidth, $.jqplot.MeterGaugeRenderer
 rowSpacing, Legend
+ +
this.marginBottom = null
CSS margin for the legend DOM element.
this.marginLeft = null
CSS margin for the legend DOM element.
this.marginRight = null
CSS margin for the legend DOM element.
this.marginTop = null
CSS margin for the legend DOM element.
this.mark = 'outside'
tick mark on the axis.
this.mark = 'outside'
tick mark on the axis.
this.markerOptions = {}
renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.
this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false})
Renderer used to draw the marker of the highlighted point.
this.markerRenderer = {show:false}
Renderer to use to draw markers on the line.
this.markerRenderer = $.jqplot.MarkerRenderer
A class of a renderer which will draw marker (e.g.
this.markSize = 6
Length of the tick marks in pixels.
this.markSize = 4
Length of the tick marks in pixels.
this.max
Maximum value on the gauge.
this.max = null
maximum value of the axis (in data units, not pixels).
this.min
Minimum value on the gauge.
this.min = null
minimum value of the axis (in data units, not pixels).
this.minorTicks = 0
Number of ticks to add between “major” ticks.
this.minorTicks = 'auto'
Number of ticks to add between “major” ticks.
+ + + +
Optional name for the overlay object.
this.needlePad = 6
Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
this.needleThickness = null
Maximum thickness the needle.
this.negativeColor
css color spec used for filled (area) plots that are filled to zero and the “useNegativeColors” option is true.
this.neighborThreshold = 4
how close or far (in pixels) the cursor must be from a point marker to detect the point.
Options to set up a mock plot with a data loading indicator if no data is specified.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberColumns = null
Maximum number of columns in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberRows = null
Maximum number of rows in the legend.
this.numberTicks
Desired number of ticks.
+ + + +
this.objects = []
this.offset = 1
Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
this.offsetBars = false
False will center bars on their y value.
this.openColor = null
color of the open price tick mark.
+ + + +
this.pad = 1.2
Padding to extend the range above and below the data bounds.
this.padding = 20
padding between the donut and plot edges, legend, etc.
this.padding = {top: 20, right: 20, bottom: 20, left: 20}
padding between the funnel and plot edges, legend, etc.
this.padding = null
padding between the meterGauge and plot edges, auto calculated by default.
this.padding = 20
padding between the pie and plot edges, legend, etc.
this.padMax = null
Padding to extend the range above data bounds.
this.padMin = null
Padding to extend the range below data bounds.
this.pegNeedle = true
True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is “pegged”.
this.placement = "insideGrid"
“insideGrid” places legend inside the grid area of the plot.
this.position = null
Position of axis.
Wether to draw the legend before the series or not.
this.prefix = ''
String to prepend to the tick label.
this.prefix = ''
String to prepend to the tick label.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
this.pt2px = null
Point to pixel scaling factor, used for computing height of bounding box around a label.
+ + + +
this.renderer = new $.jqplot.LineRenderer()
Renderer to use to draw the trend line.
this.renderer = $.jqplot.LinearAxisRenderer
A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.
this.renderer = $.jqplot.CanvasGridRenderer
Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.
this.renderer = $.jqplot.LineRenderer
A class of a renderer which will draw the series, see $.jqplot.LineRenderer.
this.renderer = $.jqplot.DivTitleRenderer
A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.
this.rendererOptions = {marker:{show:false}}
Options to pass to the line renderer.
this.rendererOptions = {}
renderer specific options.
this.rendererOptions = {}
Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.rendererOptions = {}
Options to pass on to the renderer.
this.rendererOptions = {}
renderer specific options passed to the renderer.
this.ringColor = "#BBC6D0"
color of the outer ring, hub, and needle of the gauge.
this.ringMargin = null
pixel distance between rings, or multiple series in a donut plot.
this.ringWidth = null
width of the ring around the gauge.
this.rowSpacing = '0.5em'
css padding-top spec for the rows in the legend.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Properties5.html b/public/javascripts/jqplot/docs/index/Properties5.html new file mode 100644 index 0000000..088d73b --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Properties5.html @@ -0,0 +1,34 @@ + + +Property Index + + + + + + + + + +
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
S
 scaleToHiddenSeries, Axis
 sectionMargin, $.jqplot.FunnelRenderer
 series, jqPlot
 seriesColors, jqPlot
 seriesDefaults, jqPlot
 seriesLabelIndex, $.jqplot.PointLabels
 seriesToggle
 seriesToggleReplot
 shadow
 shadowAlpha
 shadowAngle
 shadowColor, Grid
 shadowDepth
 shadowOffset
 shadowRenderer, $.jqplot.MarkerRenderer
 shadowWidth, Grid
 shapeRenderer, $.jqplot.MarkerRenderer
 show
 showBorders, $.jqplot.MekkoRenderer
 showCursorLegend, $.jqplot.Cursor
 showDataLabels
 showGridline
 showHorizontalLine, $.jqplot.Cursor
 showLabel
 showLabels
 showLine, Series
 showLines, $.jqplot.LineRenderer
 showMark
 showMarker
 showMinorTicks, Axis
 showSwatch, Legend
 showTickLabels, $.jqplot.MeterGaugeRenderer
 showTickMarks, Axis
 showTicks
 showTooltip
 showTooltipDataPosition, $.jqplot.Cursor
 showTooltipGridPosition, $.jqplot.Cursor
 showTooltipOutsideZoom, $.jqplot.Cursor
 showTooltipPrecision, $.jqplot.CanvasOverlay
 showTooltipUnitPosition, $.jqplot.Cursor
 showVerticalLine, $.jqplot.Cursor
 size
 sizeAdjust, $.jqplot.Highlighter
 sliceMargin
 smooth, $.jqplot.LineRenderer
 sortData, jqPlot
 sortMergedLabels, $.jqplot.CategoryAxisRenderer
 stackedValue, $.jqplot.PointLabels
 stackSeries, jqPlot
 start, Line
 startAngle
 stop, Line
 strokeRect, $.jqplot.shapeRenderer
 strokeStyle, $.jqplot.shapeRenderer
 style
 suffix, $.jqplot.AxisTickRenderer
 synchronizeHighlight
 syncTicks, Axis
+ +
this.scaleToHiddenSeries = false
True to include hidden series when computing axes bounds and scaling.
this.sectionMargin = 6
spacing between funnel sections in pixels.
this.series = []
Array of series object options.
this.seriesColors = $.jqplot.config.defaultColors
Ann array of CSS color specifications that will be applied, in order, to the series in the plot.
seriesDefaults: {}, series:[] }
default options that will be applied to all series.
this.seriesLabelIndex = null
array index for location of labels within data point arrays.
this.seriesToggle = 'normal'
false to not enable series on/off toggling on the legend.
this.seriesToggleReplot = false
True to replot the chart after toggling series on/off.
wether or not to draw a shadow on the line
this.shadow = true
wether or not to draw a shadow on the line
this.shadow = true
true or false, wether or not to show the shadow.
this.shadow = true
wether to show a shadow behind the grid.
this.shadowAlpha = 0.08
transparency of the shadow (0 = transparent, 1 = opaque)
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
transparency of the shadow (0 = transparent, 1 = opaque)
this.shadowAlpha = 0.07
Alpha transparency of the shadow.
this.shadowAlpha = '0.07'
Alpha channel transparency of shadow.
this.shadowAlpha = '0.1'
Alpha channel transparency of shadow.
Shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowAngle = 45
Angle of the shadow on the trend line.
this.shadowAngle = 45
shadow angle in degrees
this.shadowAngle = 45
Shadow angle in degrees
this.shadowColor = null
an optional css color spec for the shadow in ‘rgba(n, n, n, n)’ form
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 4
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 5
number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
number of strokes to make of the shadow.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowDepth = 3
Number of times shadow is stroked, each stroke offset shadowOffset from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1
Shadow offset from line in pixels
this.shadowOffset = 2
offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 2
offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
this.shadowOffset = 1.0
pixel offset for each stroke of the shadow.
this.shadowOffset = 1.5
Offset of each shadow stroke from the border in pixels
this.shadowOffset = 1.25
Shadow offset from line in pixels
this.shadowRenderer = new $.jqplot.ShadowRenderer()
Renderer that will draws the shadows on the marker.
this.shadowWidth = 3
width of the stoke for the shadow
this.shapeRenderer = new $.jqplot.ShapeRenderer()
Renderer that will draw the marker.
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
this.show = true
wether or not to show the tick (mark and label).
true to show (draw), false to not draw.
this.show = $.jqplot.config.enablePlugins
wether to show the cursor or not.
this.show = $.jqplot.config.enablePlugins
true to show the highlight.
true to show the bands.
this.show = true
wether or not to show the marker.
this.show = $.jqplot.config.enablePlugins
show the labels or not.
this.show = $.jqplot.config.enablePlugins
Wether or not to show the trend line.
this.show = false
Wether to display the axis on the graph.
this.show = false
Wether to display the legend on the graph.
this.show = true
wether or not to draw the series.
this.show = true
wether or not to show the title
this.showBorders = true
True to draw borders lines between areas on the chart.
this.showCursorLegend = false
Replace the plot legend with an enhanced legend displaying intersection information.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showDataLabels = false
true to show data labels on slices.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showGridline = true
wether or not to draw the gridline on the grid at this tick.
this.showHorizontalLine = false
draw a horizontal line across the plot which follows the cursor.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
wether or not to show the label.
this.showLabel = true
true to show the axis label.
this.showLabel = true
true to show label for this series in the legend.
this.showLabels = true
True to show labels on bubbles (if any), false to not show.
this.showLabels = true
true to show the label text on the legend.
this.showLine = true
wether to actually draw the line or not.
True to show lines at top and bottom of bands [default: false].
this.showMark = true
wether or not to show the mark on the axis.
this.showMark = true
wether or not to show the mark on the axis.
this.showMarker = true
true to show the marker
this.showMarker = true
wether or not to show the markers at the data points.
this.showMinorTicks = true
Wether or not to show minor ticks.
this.showSwatches = true
true to show the color swatches on the legend.
this.showTickLabels = true
true to show tick labels next to ticks.
this.showTickMarks = true
Wether to show the tick marks (line crossing grid) or not.
this.showTicks = true
true to show ticks around gauge.
this.showTicks = true
Wether to show the ticks (both marks and labels) or not.
Show a tooltip with data point values.
this.showTooltip = true
show a cursor position tooltip.
this.showTooltip = true
Show a tooltip with data point values.
this.showTooltipDataPosition = false
Used with showVerticalLine to show intersecting data points in the tooltip.
this.showTooltipGridPosition = false
show the grid pixel coordinates of the mouse.
this.showTooltipOutsideZoom = false
True will keep updating the tooltip when zooming of the grid.
Controls how close to line cursor must be to show tooltip.
this.showTooltipUnitPosition = true
show the unit (data) coordinates of the mouse.
this.showVerticalLine = false
draw a vertical line across the plot which follows the cursor.
this.size = 4
Length of the tick beyond the grid in pixels.
this.size = 9.0
Size of the marker (diameter or circle, length of edge of square, etc.)
this.sizeAdjust = 5
Pixels to add to the overall size of the highlight.
this.sliceMargin = 0
angular spacing between donut slices in degrees.
this.sliceMargin = 0
angular spacing between pie slices in degrees.
this.renderer.smooth = false
True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.
this.sortData = true
false to not sort the data passed in by the user.
this.sortMergedLabels = false
True to sort tick labels when labels are created by merging x axis values from multiple series.
this.stackedValue = false
true to display value as stacked in a stacked plot.
this.stackSeries = false
true or false, creates a stack or “mountain” plot.
[x, y] coordinates for the start of the line.
this.startAngle = 0
Angle to start drawing donut in degrees.
this.startAngle = 0
Angle to start drawing pie in degrees.
stop: [] }
[x, y] coordinates for the end of the line.
this.strokeRect = false
true to draw shape as a stroked rectangle.
this.strokeStyle = '#999999'
css color spec for the stoke style
this.style = 'crosshair'
CSS spec for cursor style
this.style = 'filledCircle'
One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
this.suffix = ''
String to append to the tick label.
this.synchronizeHighlight = false
Index of another series to highlight when this series is highlighted.
this.syncTicks = null
true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/index/Properties6.html b/public/javascripts/jqplot/docs/index/Properties6.html new file mode 100644 index 0000000..985ab8e --- /dev/null +++ b/public/javascripts/jqplot/docs/index/Properties6.html @@ -0,0 +1,58 @@ + + +Property Index + + + + + + + + + +
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
T
 text, Title
 textAlign, Title
 textColor
 themes, $.jqplot.ThemeEngine
 thickness, $.jqplot.DonutRenderer
 tickColor, $.jqplot.MeterGaugeRenderer
 tickInset
 tickInterval, Axis
 tickLength, $.jqplot.OHLCRenderer
 tickMode, $.jqplot.MekkoAxisRenderer
 tickOptions, Axis
 tickPadding, $.jqplot.MeterGaugeRenderer
 tickRenderer
 ticks
 tickSpacing
 title, jqPlot
 tooltipAxes, $.jqplot.Highlighter
 tooltipAxisGroups, $.jqplot.Cursor
 tooltipFadeSpeed
 tooltipFormatString
 tooltipLocation
 tooltipOffset
 transposedData, $.jqplot.BarRenderer
 type, $.jqplot.Trendline
U
 upBodyColor, $.jqplot.OHLCRenderer
 useAxesFormatters
 useNegativeColors, Series
 useSeriesColor, Axis
V
 varyBarColor, $.jqplot.BarRenderer
 varyBlockColors, $.jqplot.BlockRenderer
 varyBubbleColors, $.jqplot.BubbleRenderer
W
 waterfall, $.jqplot.BarRenderer
 wickColor, $.jqplot.OHLCRenderer
 widthRatio, $.jqplot.FunnelRenderer
X
 xaxis
 xmax, HorizontalLine
 xmin, HorizontalLine
 xoffset, Legend
 xpadding, $.jqplot.PointLabels
Y
 y, HorizontalLine
 yaxis
 yoffset, Legend
 ypadding, $.jqplot.PointLabels
 yvalues, $.jqplot.Highlighter
Z
 zoom, $.jqplot.Cursor
+ +
this.text = text
text of the title;
this.textAlign
css text-align spec for the text.
this.textColor
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor = '#666666'
css spec for the color attribute.
this.textColor
css color spec for the legend text.
this.textColor
css color spec for the text.
this.themes = {}
hash of themes managed by the theme engine.
this.thickness = null
thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.
this.tickColor = "989898"
color of the tick marks around the gauge.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInset = 0
Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.
this.tickInterval
number of units between ticks.
this.tickLength = 'auto'
length of the line in pixels indicating open and close price.
this.tickMode
How to space the ticks on the axis.
this.tickOptions = {}
Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.
this.tickPadding = null
padding of the tick marks to the outer ring and the tick labels to marks.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.tickRenderer = $.jqplot.AxisTickRenderer
A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.
this.ticks = []
Array of tick values.
this.ticks = []
1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
this.tickSpacing = 30
Degrees between ticks.
this.tickSpacing = 75
Approximate pixel spacing between ticks on graph.
this.title = new Title()
Title object.
this.tooltipAxes = 'both'
Which axes to display in tooltip, ‘x’, ‘y’ or ‘both’, ‘xy’ or ‘yx’ ‘both’ and ‘xy’ are equivalent, ‘yx’ reverses order of labels.
this.tooltipAxisGroups = []
Show position for the specified axes.
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
this.tooltipFadeSpeed = "fast"
‘slow’, ‘def’, ‘fast’, or number of milliseconds.
tooltipFormatString: '%d, %d' }
Format string passed the x and y values of the cursor on the line.
this.tooltipFormatString = '%.4P, %.4P'
sprintf format string for the tooltip.
this.tooltipFormatString = '%.5P'
sprintf format string for the tooltip.
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
this.tooltipLocation = 'se'
Where to position tooltip.
this.tooltipLocation = 'nw'
Where to position tooltip, ‘n’, ‘ne’, ‘e’, ‘se’, ‘s’, ‘sw’, ‘w’, ‘nw’
Pixel offset of tooltip from the highlight.
this.tooltipOffset = 6
Pixel offset of tooltip from the grid boudaries or cursor center.
this.tooltipOffset = 2
Pixel offset of tooltip from the highlight.
this.transposedData = true
NOT IMPLEMENTED YET.
this.type = 'linear'
Either ‘exponential’, ‘exp’, or ‘linear’.
+ + + +
this.upBodyColor = null
Color of candlestick body of an “up” day.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useAxesFormatters = true
Use the x and y axes formatters to format the text in the tooltip.
this.useNegativeColors = true
true to color negative values differently in filled and bar charts.
this.useSeriesColor = false
Use the color of the first series associated with this axis for the tick marks and line bordering this axis.
+ + + +
this.varyBarColor = false
true to color each bar of a series separately rather than have every bar of a given series the same color.
this.varyBlockColors = false
true to vary the color of each block in this series according to the seriesColors array.
this.varyBubbleColors = true
True to vary the color of each bubble in this series according to the seriesColors array.
+ + + +
this.waterfall = false
true to enable waterfall plot.
this.wickColor = null
color of the hi-lo line thorugh the candlestick body.
this.widthRatio = 0.2
The ratio of the width of the top of the funnel to the bottom.
+ + + +
X axis to use for positioning/scaling the line.
this.xaxis = 'xaxis'
which x axis to use with this series, either ‘xaxis’ or ‘x2axis’.
x value for the end of the line, null to scale to axis max.
x value for the start of the line, null to scale to axis min.
this.xoffset = 0
DEPRECATED.
this.xpadding = 6
horizontal padding in pixels between point and label
+ + + +
y value to position the line
Y axis to use for positioning/scaling the line.
this.yaxis = 'yaxis'
which y axis to use with this series, either ‘yaxis’ or ‘y2axis’.
this.yoffset = 0
DEPRECATED.
this.ypadding = 6
vertical padding in pixels between point and label
this.yvalues = 1
Number of y values to expect in the data point array.
+ + + +
this.zoom = false
Enable plot zooming.
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/javascript/main.js b/public/javascripts/jqplot/docs/javascript/main.js new file mode 100644 index 0000000..efcdca9 --- /dev/null +++ b/public/javascripts/jqplot/docs/javascript/main.js @@ -0,0 +1,836 @@ +// This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL + + +// +// Browser Styles +// ____________________________________________________________________________ + +var agt=navigator.userAgent.toLowerCase(); +var browserType; +var browserVer; + +if (agt.indexOf("opera") != -1) + { + browserType = "Opera"; + + if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1) + { browserVer = "Opera7"; } + else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1) + { browserVer = "Opera8"; } + else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1) + { browserVer = "Opera9"; } + } + +else if (agt.indexOf("applewebkit") != -1) + { + browserType = "Safari"; + + if (agt.indexOf("version/3") != -1) + { browserVer = "Safari3"; } + else if (agt.indexOf("safari/4") != -1) + { browserVer = "Safari2"; } + } + +else if (agt.indexOf("khtml") != -1) + { + browserType = "Konqueror"; + } + +else if (agt.indexOf("msie") != -1) + { + browserType = "IE"; + + if (agt.indexOf("msie 6") != -1) + { browserVer = "IE6"; } + else if (agt.indexOf("msie 7") != -1) + { browserVer = "IE7"; } + } + +else if (agt.indexOf("gecko") != -1) + { + browserType = "Firefox"; + + if (agt.indexOf("rv:1.7") != -1) + { browserVer = "Firefox1"; } + else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1) + { browserVer = "Firefox15"; } + else if (agt.indexOf("rv:1.8.1") != -1) + { browserVer = "Firefox2"; } + } + + +// +// Support Functions +// ____________________________________________________________________________ + + +function GetXPosition(item) + { + var position = 0; + + if (item.offsetWidth != null) + { + while (item != document.body && item != null) + { + position += item.offsetLeft; + item = item.offsetParent; + }; + }; + + return position; + }; + + +function GetYPosition(item) + { + var position = 0; + + if (item.offsetWidth != null) + { + while (item != document.body && item != null) + { + position += item.offsetTop; + item = item.offsetParent; + }; + }; + + return position; + }; + + +function MoveToPosition(item, x, y) + { + // Opera 5 chokes on the px extension, so it can use the Microsoft one instead. + + if (item.style.left != null) + { + item.style.left = x + "px"; + item.style.top = y + "px"; + } + else if (item.style.pixelLeft != null) + { + item.style.pixelLeft = x; + item.style.pixelTop = y; + }; + }; + + +// +// Menu +// ____________________________________________________________________________ + + +function ToggleMenu(id) + { + if (!window.document.getElementById) + { return; }; + + var display = window.document.getElementById(id).style.display; + + if (display == "none") + { display = "block"; } + else + { display = "none"; } + + window.document.getElementById(id).style.display = display; + } + +function HideAllBut(ids, max) + { + if (document.getElementById) + { + ids.sort( function(a,b) { return a - b; } ); + var number = 1; + + while (number < max) + { + if (ids.length > 0 && number == ids[0]) + { ids.shift(); } + else + { + document.getElementById("MGroupContent" + number).style.display = "none"; + }; + + number++; + }; + }; + } + + +// +// Tooltips +// ____________________________________________________________________________ + + +var tooltipTimer = 0; + +function ShowTip(event, tooltipID, linkID) + { + if (tooltipTimer) + { clearTimeout(tooltipTimer); }; + + var docX = event.clientX + window.pageXOffset; + var docY = event.clientY + window.pageYOffset; + + var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")"; + + tooltipTimer = setTimeout(showCommand, 1000); + } + +function ReallyShowTip(tooltipID, linkID, docX, docY) + { + tooltipTimer = 0; + + var tooltip; + var link; + + if (document.getElementById) + { + tooltip = document.getElementById(tooltipID); + link = document.getElementById(linkID); + } +/* else if (document.all) + { + tooltip = eval("document.all['" + tooltipID + "']"); + link = eval("document.all['" + linkID + "']"); + } +*/ + if (tooltip) + { + var left = GetXPosition(link); + var top = GetYPosition(link); + top += link.offsetHeight; + + + // The fallback method is to use the mouse X and Y relative to the document. We use a separate if and test if its a number + // in case some browser snuck through the above if statement but didn't support everything. + + if (!isFinite(top) || top == 0) + { + left = docX; + top = docY; + } + + // Some spacing to get it out from under the cursor. + + top += 10; + + // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the + // page. We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right. + + if (tooltip.offsetWidth != null) + { + var width = tooltip.offsetWidth; + var docWidth = document.body.clientWidth; + + if (left + width > docWidth) + { left = docWidth - width - 1; } + + // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width. + if (left < 0) + { left = 0; }; + } + + MoveToPosition(tooltip, left, top); + tooltip.style.visibility = "visible"; + } + } + +function HideTip(tooltipID) + { + if (tooltipTimer) + { + clearTimeout(tooltipTimer); + tooltipTimer = 0; + } + + var tooltip; + + if (document.getElementById) + { tooltip = document.getElementById(tooltipID); } + else if (document.all) + { tooltip = eval("document.all['" + tooltipID + "']"); } + + if (tooltip) + { tooltip.style.visibility = "hidden"; } + } + + +// +// Blockquote fix for IE +// ____________________________________________________________________________ + + +function NDOnLoad() + { + if (browserVer == "IE6") + { + var scrollboxes = document.getElementsByTagName('blockquote'); + + if (scrollboxes.item(0)) + { + NDDoResize(); + window.onresize=NDOnResize; + }; + }; + }; + + +var resizeTimer = 0; + +function NDOnResize() + { + if (resizeTimer != 0) + { clearTimeout(resizeTimer); }; + + resizeTimer = setTimeout(NDDoResize, 250); + }; + + +function NDDoResize() + { + var scrollboxes = document.getElementsByTagName('blockquote'); + + var i; + var item; + + i = 0; + while (item = scrollboxes.item(i)) + { + item.style.width = 100; + i++; + }; + + i = 0; + while (item = scrollboxes.item(i)) + { + item.style.width = item.parentNode.offsetWidth; + i++; + }; + + clearTimeout(resizeTimer); + resizeTimer = 0; + } + + + +/* ________________________________________________________________________________________________________ + + Class: SearchPanel + ________________________________________________________________________________________________________ + + A class handling everything associated with the search panel. + + Parameters: + + name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts. + mode - The mode the search is going to work in. Pass CommandLineOption()>, so the + value will be something like "HTML" or "FramedHTML". + + ________________________________________________________________________________________________________ +*/ + + +function SearchPanel(name, mode, resultsPath) + { + if (!name || !mode || !resultsPath) + { alert("Incorrect parameters to SearchPanel."); }; + + + // Group: Variables + // ________________________________________________________________________ + + /* + var: name + The name of the global variable that will be storing this instance of the class. + */ + this.name = name; + + /* + var: mode + The mode the search is going to work in, such as "HTML" or "FramedHTML". + */ + this.mode = mode; + + /* + var: resultsPath + The relative path from the current HTML page to the results page directory. + */ + this.resultsPath = resultsPath; + + /* + var: keyTimeout + The timeout used between a keystroke and when a search is performed. + */ + this.keyTimeout = 0; + + /* + var: keyTimeoutLength + The length of in thousandths of a second. + */ + this.keyTimeoutLength = 500; + + /* + var: lastSearchValue + The last search string executed, or an empty string if none. + */ + this.lastSearchValue = ""; + + /* + var: lastResultsPage + The last results page. The value is only relevant if is set. + */ + this.lastResultsPage = ""; + + /* + var: deactivateTimeout + + The timeout used between when a control is deactivated and when the entire panel is deactivated. Is necessary + because a control may be deactivated in favor of another control in the same panel, in which case it should stay + active. + */ + this.deactivateTimout = 0; + + /* + var: deactivateTimeoutLength + The length of in thousandths of a second. + */ + this.deactivateTimeoutLength = 200; + + + + + // Group: DOM Elements + // ________________________________________________________________________ + + + // Function: DOMSearchField + this.DOMSearchField = function() + { return document.getElementById("MSearchField"); }; + + // Function: DOMSearchType + this.DOMSearchType = function() + { return document.getElementById("MSearchType"); }; + + // Function: DOMPopupSearchResults + this.DOMPopupSearchResults = function() + { return document.getElementById("MSearchResults"); }; + + // Function: DOMPopupSearchResultsWindow + this.DOMPopupSearchResultsWindow = function() + { return document.getElementById("MSearchResultsWindow"); }; + + // Function: DOMSearchPanel + this.DOMSearchPanel = function() + { return document.getElementById("MSearchPanel"); }; + + + + + // Group: Event Handlers + // ________________________________________________________________________ + + + /* + Function: OnSearchFieldFocus + Called when focus is added or removed from the search field. + */ + this.OnSearchFieldFocus = function(isActive) + { + this.Activate(isActive); + }; + + + /* + Function: OnSearchFieldChange + Called when the content of the search field is changed. + */ + this.OnSearchFieldChange = function() + { + if (this.keyTimeout) + { + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + }; + + var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + + if (searchValue != this.lastSearchValue) + { + if (searchValue != "") + { + this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength); + } + else + { + if (this.mode == "HTML") + { this.DOMPopupSearchResultsWindow().style.display = "none"; }; + this.lastSearchValue = ""; + }; + }; + }; + + + /* + Function: OnSearchTypeFocus + Called when focus is added or removed from the search type. + */ + this.OnSearchTypeFocus = function(isActive) + { + this.Activate(isActive); + }; + + + /* + Function: OnSearchTypeChange + Called when the search type is changed. + */ + this.OnSearchTypeChange = function() + { + var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + + if (searchValue != "") + { + this.Search(); + }; + }; + + + + // Group: Action Functions + // ________________________________________________________________________ + + + /* + Function: CloseResultsWindow + Closes the results window. + */ + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = "none"; + this.Activate(false, true); + }; + + + /* + Function: Search + Performs a search. + */ + this.Search = function() + { + this.keyTimeout = 0; + + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + var searchTopic = this.DOMSearchType().value; + + var pageExtension = searchValue.substr(0,1); + + if (pageExtension.match(/^[a-z]/i)) + { pageExtension = pageExtension.toUpperCase(); } + else if (pageExtension.match(/^[0-9]/)) + { pageExtension = 'Numbers'; } + else + { pageExtension = "Symbols"; }; + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + // indexSectionsWithContent is defined in searchdata.js + if (indexSectionsWithContent[searchTopic][pageExtension] == true) + { + resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else + { + resultsPage = this.resultsPath + '/NoResults.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + }; + + var resultsFrame; + if (this.mode == "HTML") + { resultsFrame = window.frames.MSearchResults; } + else if (this.mode == "FramedHTML") + { resultsFrame = window.top.frames['Content']; }; + + + if (resultsPage != this.lastResultsPage || + + // Bug in IE. If everything becomes hidden in a run, none of them will be able to be reshown in the next for some + // reason. It counts the right number of results, and you can even read the display as "block" after setting it, but it + // just doesn't work in IE 6 or IE 7. So if we're on the right page but the previous search had no results, reload the + // page anyway to get around the bug. + (browserType == "IE" && hasResultsPage && + (!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) ) + + { + resultsFrame.location.href = resultsPageWithSearch; + } + + // So if the results page is right and there's no IE bug, reperform the search on the existing page. We have to check if there + // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even + // if it did. + else if (hasResultsPage) + { + // We need to check if this exists in case the frame is present but didn't finish loading. + if (resultsFrame.searchResults) + { resultsFrame.searchResults.Search(searchValue); } + + // Otherwise just reload instead of waiting. + else + { resultsFrame.location.href = resultsPageWithSearch; }; + }; + + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block") + { + var domSearchType = this.DOMSearchType(); + + var left = GetXPosition(domSearchType); + var top = GetYPosition(domSearchType) + domSearchType.offsetHeight; + + MoveToPosition(domPopupSearchResultsWindow, left, top); + domPopupSearchResultsWindow.style.display = 'block'; + }; + + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + }; + + + + // Group: Activation Functions + // Functions that handle whether the entire panel is active or not. + // ________________________________________________________________________ + + + /* + Function: Activate + + Activates or deactivates the search panel, resetting things to their default values if necessary. You can call this on every + control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently. + + Parameters: + + isActive - Whether you're activating or deactivating the panel. + ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay. + */ + this.Activate = function(isActive, ignoreDeactivateDelay) + { + // We want to ignore isActive being false while the results window is open. + if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block")) + { + if (this.inactivateTimeout) + { + clearTimeout(this.inactivateTimeout); + this.inactivateTimeout = 0; + }; + + this.DOMSearchPanel().className = 'MSearchPanelActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == 'Search') + { searchField.value = ""; } + } + else if (!ignoreDeactivateDelay) + { + this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength); + } + else + { + this.InactivateAfterTimeout(); + }; + }; + + + /* + Function: InactivateAfterTimeout + + Called by , which is set by . Inactivation occurs on a timeout because a control may + receive OnBlur() when focus is really transferring to another control in the search panel. In this case we don't want to + actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value. + So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation. + */ + this.InactivateAfterTimeout = function() + { + this.inactivateTimeout = 0; + + this.DOMSearchPanel().className = 'MSearchPanelInactive'; + this.DOMSearchField().value = "Search"; + + this.lastSearchValue = ""; + this.lastResultsPage = ""; + }; + }; + + + + +/* ________________________________________________________________________________________________________ + + Class: SearchResults + _________________________________________________________________________________________________________ + + The class that handles everything on the search results page. + _________________________________________________________________________________________________________ +*/ + + +function SearchResults(name, mode) + { + /* + var: mode + The mode the search is going to work in, such as "HTML" or "FramedHTML". + */ + this.mode = mode; + + /* + var: lastMatchCount + The number of matches from the last run of . + */ + this.lastMatchCount = 0; + + + /* + Function: Toggle + Toggles the visibility of the passed element ID. + */ + this.Toggle = function(id) + { + if (this.mode == "FramedHTML") + { return; }; + + var parentElement = document.getElementById(id); + + var element = parentElement.firstChild; + + while (element && element != parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'ISubIndex') + { + if (element.style.display == 'block') + { element.style.display = "none"; } + else + { element.style.display = 'block'; } + }; + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { element = element.firstChild; } + else if (element.nextSibling) + { element = element.nextSibling; } + else + { + do + { + element = element.parentNode; + } + while (element && element != parentElement && !element.nextSibling); + + if (element && element != parentElement) + { element = element.nextSibling; }; + }; + }; + }; + + + /* + Function: Search + + Searches for the passed string. If there is no parameter, it takes it from the URL query. + + Always returns true, since other documents may try to call it and that may or may not be possible. + */ + this.Search = function(search) + { + if (!search) + { + search = window.location.search; + search = search.substring(1); // Remove the leading ? + search = unescape(search); + }; + + search = search.replace(/^ +/, ""); + search = search.replace(/ +$/, ""); + search = search.toLowerCase(); + + if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily. + { + search = search.replace(/\_/g, "_und"); + search = search.replace(/\ +/gi, "_spc"); + search = search.replace(/\~/g, "_til"); + search = search.replace(/\!/g, "_exc"); + search = search.replace(/\@/g, "_att"); + search = search.replace(/\#/g, "_num"); + search = search.replace(/\$/g, "_dol"); + search = search.replace(/\%/g, "_pct"); + search = search.replace(/\^/g, "_car"); + search = search.replace(/\&/g, "_amp"); + search = search.replace(/\*/g, "_ast"); + search = search.replace(/\(/g, "_lpa"); + search = search.replace(/\)/g, "_rpa"); + search = search.replace(/\-/g, "_min"); + search = search.replace(/\+/g, "_plu"); + search = search.replace(/\=/g, "_equ"); + search = search.replace(/\{/g, "_lbc"); + search = search.replace(/\}/g, "_rbc"); + search = search.replace(/\[/g, "_lbk"); + search = search.replace(/\]/g, "_rbk"); + search = search.replace(/\:/g, "_col"); + search = search.replace(/\;/g, "_sco"); + search = search.replace(/\"/g, "_quo"); + search = search.replace(/\'/g, "_apo"); + search = search.replace(/\/g, "_ran"); + search = search.replace(/\,/g, "_com"); + search = search.replace(/\./g, "_per"); + search = search.replace(/\?/g, "_que"); + search = search.replace(/\//g, "_sla"); + search = search.replace(/[^a-z0-9\_]i/gi, "_zzz"); + }; + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); + + if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search) + { + row.style.display = "block"; + matches++; + } + else + { row.style.display = "none"; }; + }; + + i++; + }; + + document.getElementById("Searching").style.display="none"; + + if (matches == 0) + { document.getElementById("NoMatches").style.display="block"; } + else + { document.getElementById("NoMatches").style.display="none"; } + + this.lastMatchCount = matches; + + return true; + }; + }; + diff --git a/public/javascripts/jqplot/docs/javascript/searchdata.js b/public/javascripts/jqplot/docs/javascript/searchdata.js new file mode 100644 index 0000000..72083b4 --- /dev/null +++ b/public/javascripts/jqplot/docs/javascript/searchdata.js @@ -0,0 +1,182 @@ +var indexSectionsWithContent = { + "General": { + "Symbols": true, + "Numbers": false, + "A": true, + "B": true, + "C": true, + "D": true, + "E": true, + "F": true, + "G": true, + "H": true, + "I": true, + "J": true, + "K": false, + "L": true, + "M": true, + "N": true, + "O": true, + "P": true, + "Q": true, + "R": true, + "S": true, + "T": true, + "U": true, + "V": true, + "W": true, + "X": true, + "Y": true, + "Z": true + }, + "Functions": { + "Symbols": false, + "Numbers": false, + "A": false, + "B": false, + "C": true, + "D": true, + "E": false, + "F": false, + "G": true, + "H": false, + "I": true, + "J": false, + "K": false, + "L": false, + "M": true, + "N": true, + "O": false, + "P": false, + "Q": true, + "R": true, + "S": true, + "T": false, + "U": false, + "V": false, + "W": false, + "X": false, + "Y": false, + "Z": true + }, + "Files": { + "Symbols": false, + "Numbers": false, + "A": false, + "B": false, + "C": false, + "D": false, + "E": false, + "F": false, + "G": false, + "H": false, + "I": false, + "J": true, + "K": false, + "L": false, + "M": false, + "N": false, + "O": false, + "P": false, + "Q": false, + "R": false, + "S": false, + "T": false, + "U": false, + "V": false, + "W": false, + "X": false, + "Y": false, + "Z": false + }, + "Classes": { + "Symbols": true, + "Numbers": false, + "A": true, + "B": false, + "C": false, + "D": true, + "E": false, + "F": false, + "G": true, + "H": true, + "I": false, + "J": true, + "K": false, + "L": true, + "M": false, + "N": false, + "O": false, + "P": false, + "Q": false, + "R": false, + "S": true, + "T": true, + "U": false, + "V": true, + "W": false, + "X": false, + "Y": false, + "Z": false + }, + "Hooks": { + "Symbols": false, + "Numbers": false, + "A": true, + "B": false, + "C": false, + "D": false, + "E": true, + "F": false, + "G": false, + "H": false, + "I": false, + "J": true, + "K": false, + "L": false, + "M": false, + "N": false, + "O": false, + "P": true, + "Q": false, + "R": false, + "S": false, + "T": false, + "U": false, + "V": false, + "W": false, + "X": false, + "Y": false, + "Z": false + }, + "Properties": { + "Symbols": false, + "Numbers": false, + "A": true, + "B": true, + "C": true, + "D": true, + "E": true, + "F": true, + "G": true, + "H": true, + "I": true, + "J": false, + "K": false, + "L": true, + "M": true, + "N": true, + "O": true, + "P": true, + "Q": false, + "R": true, + "S": true, + "T": true, + "U": true, + "V": true, + "W": true, + "X": true, + "Y": true, + "Z": true + } + } \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesA.html b/public/javascripts/jqplot/docs/search/ClassesA.html new file mode 100644 index 0000000..2f4dab5 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesA.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesD.html b/public/javascripts/jqplot/docs/search/ClassesD.html new file mode 100644 index 0000000..135eeb6 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesD.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesG.html b/public/javascripts/jqplot/docs/search/ClassesG.html new file mode 100644 index 0000000..36f121b --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesG.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesH.html b/public/javascripts/jqplot/docs/search/ClassesH.html new file mode 100644 index 0000000..c411b32 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesH.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesJ.html b/public/javascripts/jqplot/docs/search/ClassesJ.html new file mode 100644 index 0000000..b225009 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesJ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesL.html b/public/javascripts/jqplot/docs/search/ClassesL.html new file mode 100644 index 0000000..6a93b81 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesL.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesS.html b/public/javascripts/jqplot/docs/search/ClassesS.html new file mode 100644 index 0000000..53823e7 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesS.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesSymbols.html b/public/javascripts/jqplot/docs/search/ClassesSymbols.html new file mode 100644 index 0000000..5339661 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesSymbols.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesT.html b/public/javascripts/jqplot/docs/search/ClassesT.html new file mode 100644 index 0000000..782f11d --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesT.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/ClassesV.html b/public/javascripts/jqplot/docs/search/ClassesV.html new file mode 100644 index 0000000..62d2e7c --- /dev/null +++ b/public/javascripts/jqplot/docs/search/ClassesV.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FilesJ.html b/public/javascripts/jqplot/docs/search/FilesJ.html new file mode 100644 index 0000000..3c66afa --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FilesJ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsC.html b/public/javascripts/jqplot/docs/search/FunctionsC.html new file mode 100644 index 0000000..40135d3 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsC.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
copy, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsD.html b/public/javascripts/jqplot/docs/search/FunctionsD.html new file mode 100644 index 0000000..2c2bed5 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsD.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
destroy, jqPlot
drawSeries, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsG.html b/public/javascripts/jqplot/docs/search/FunctionsG.html new file mode 100644 index 0000000..561eabc --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsG.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
get, $.jqplot.ThemeEngine
getThemeNames, $.jqplot.ThemeEngine
getThemes, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsI.html b/public/javascripts/jqplot/docs/search/FunctionsI.html new file mode 100644 index 0000000..4509098 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsI.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
init, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsM.html b/public/javascripts/jqplot/docs/search/FunctionsM.html new file mode 100644 index 0000000..0b6446c --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsM.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
moveBlock, $.jqplot.BlockRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsN.html b/public/javascripts/jqplot/docs/search/FunctionsN.html new file mode 100644 index 0000000..7cc60bf --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsN.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
newTheme, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsQ.html b/public/javascripts/jqplot/docs/search/FunctionsQ.html new file mode 100644 index 0000000..9d06ebc --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsQ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
quickInit, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsR.html b/public/javascripts/jqplot/docs/search/FunctionsR.html new file mode 100644 index 0000000..fac0dbc --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsR.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
redraw, jqPlot
reInitialize, jqPlot
remove, $.jqplot.ThemeEngine
rename, $.jqplot.ThemeEngine
replot, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsS.html b/public/javascripts/jqplot/docs/search/FunctionsS.html new file mode 100644 index 0000000..bab767c --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsS.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/FunctionsZ.html b/public/javascripts/jqplot/docs/search/FunctionsZ.html new file mode 100644 index 0000000..4b364e9 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/FunctionsZ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralA.html b/public/javascripts/jqplot/docs/search/GeneralA.html new file mode 100644 index 0000000..f62a230 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralA.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
activeTheme, $.jqplot.ThemeEngine
addLegendRowHooks, $.jqplot.$.jqplot
alignTicks, $.jqplot.LinearAxisRenderer
alpha, $.jqplot.shadowRenderer
animate, jqPlot
autoscale, Axis
autoscaleBubbles, $.jqplot.BubbleRenderer
autoscaleMultiplier, $.jqplot.BubbleRenderer
autoscalePointsFactor, $.jqplot.BubbleRenderer
axes, jqPlot
axesDefaults, jqPlot
axisDefaults, $.jqplot.LogAxisRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralB.html b/public/javascripts/jqplot/docs/search/GeneralB.html new file mode 100644 index 0000000..06a9703 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralB.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
bandData, $.jqplot.LineRenderer
bands, $.jqplot.LineRenderer
barDirection, $.jqplot.BarRenderer
barLabelOptions, $.jqplot.MekkoAxisRenderer
barLabelRenderer, $.jqplot.MekkoAxisRenderer
barLabels, $.jqplot.MekkoAxisRenderer
barMargin, $.jqplot.BarRenderer
barWidth, $.jqplot.BarRenderer
bodyWidth, $.jqplot.OHLCRenderer
border, Legend
breakOnNull, Series
breakPoints, $.jqplot.LinearAxisRenderer
breakTickLabel, $.jqplot.LinearAxisRenderer
bringSeriesToFront, $.jqplot.Highlighter
bubbleAlpha, $.jqplot.BubbleRenderer
bubbleGradients, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralC.html b/public/javascripts/jqplot/docs/search/GeneralC.html new file mode 100644 index 0000000..20bb76e --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralC.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
candleStick, $.jqplot.OHLCRenderer
clearRect, $.jqplot.shapeRenderer
clickReset, $.jqplot.Cursor
closeColor, $.jqplot.OHLCRenderer
constrainOutsideZoom, $.jqplot.Cursor
constrainSmoothing, $.jqplot.LineRenderer
constrainTo, $.jqplot.Dragable
constrainZoomTo, $.jqplot.Cursor
copy, $.jqplot.ThemeEngine
css, $.jqplot.BlockRenderer
cursorLegendFormatString, $.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralD.html b/public/javascripts/jqplot/docs/search/GeneralD.html new file mode 100644 index 0000000..3c759ce --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralD.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralE.html b/public/javascripts/jqplot/docs/search/GeneralE.html new file mode 100644 index 0000000..5f3a920 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralE.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
edgeTolerance, $.jqplot.PointLabels
eventListenerHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralF.html b/public/javascripts/jqplot/docs/search/GeneralF.html new file mode 100644 index 0000000..c1af77c --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralF.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralG.html b/public/javascripts/jqplot/docs/search/GeneralG.html new file mode 100644 index 0000000..092df15 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralG.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
get, $.jqplot.ThemeEngine
getThemeNames, $.jqplot.ThemeEngine
getThemes, $.jqplot.ThemeEngine
grid, jqPlot
groups, $.jqplot.BarRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralH.html b/public/javascripts/jqplot/docs/search/GeneralH.html new file mode 100644 index 0000000..ff6d067 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralH.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
hideZeros, $.jqplot.PointLabels
highlightAlpha, $.jqplot.BubbleRenderer
highlightColor, $.jqplot.LineRenderer
hlc, $.jqplot.OHLCRenderer
Hooks, $.jqplot
hubRadius, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralI.html b/public/javascripts/jqplot/docs/search/GeneralI.html new file mode 100644 index 0000000..7873ee4 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralI.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
index, Series
init, jqPlot
innerDiameter, $.jqplot.DonutRenderer
insertBreaks, $.jqplot.BlockRenderer
intersectionThreshold, $.jqplot.Cursor
interval, $.jqplot.LineRenderer
intervalColors, $.jqplot.MeterGaugeRenderer
intervalInnerRadius, $.jqplot.MeterGaugeRenderer
intervalOuterRadius, $.jqplot.MeterGaugeRenderer
intervals, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralJ.html b/public/javascripts/jqplot/docs/search/GeneralJ.html new file mode 100644 index 0000000..fe56030 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralJ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralL.html b/public/javascripts/jqplot/docs/search/GeneralL.html new file mode 100644 index 0000000..0fc1289 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralL.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralM.html b/public/javascripts/jqplot/docs/search/GeneralM.html new file mode 100644 index 0000000..53789fa --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralM.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralN.html b/public/javascripts/jqplot/docs/search/GeneralN.html new file mode 100644 index 0000000..d282c78 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralN.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
name, $.jqplot.CanvasOverlay
needlePad, $.jqplot.MeterGaugeRenderer
needleThickness, $.jqplot.MeterGaugeRenderer
newTheme, $.jqplot.ThemeEngine
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralO.html b/public/javascripts/jqplot/docs/search/GeneralO.html new file mode 100644 index 0000000..bac068d --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralO.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
objects, $.jqplot.CanvasOverlay
offset, $.jqplot.shadowRenderer
openColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralP.html b/public/javascripts/jqplot/docs/search/GeneralP.html new file mode 100644 index 0000000..25e4405 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralP.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
pad, Axis
padMax, Axis
padMin, Axis
pegNeedle, $.jqplot.MeterGaugeRenderer
placement, Legend
postDrawHooks, $.jqplot.$.jqplot
postDrawSeriesHooks, $.jqplot.$.jqplot
postDrawSeriesShadowHooks, $.jqplot.$.jqplot
postInitHooks, $.jqplot.$.jqplot
postParseOptionsHooks, $.jqplot.$.jqplot
postParseSeriesOptionsHooks, $.jqplot.$.jqplot
postSeriesInitHooks, $.jqplot.$.jqplot
predraw, Legend
preDrawHooks, $.jqplot.$.jqplot
preDrawLegendHooks, $.jqplot.$.jqplot
preDrawSeriesHooks, $.jqplot.$.jqplot
preDrawSeriesShadowHooks, $.jqplot.$.jqplot
preInitHooks, $.jqplot.$.jqplot
preParseOptionsHooks, $.jqplot.$.jqplot
preParseSeriesOptionsHooks, $.jqplot.$.jqplot
preSeriesInitHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralQ.html b/public/javascripts/jqplot/docs/search/GeneralQ.html new file mode 100644 index 0000000..9d06ebc --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralQ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
quickInit, jqPlot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralR.html b/public/javascripts/jqplot/docs/search/GeneralR.html new file mode 100644 index 0000000..830dac9 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralR.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
redraw, jqPlot
reInitialize, jqPlot
remove, $.jqplot.ThemeEngine
rename, $.jqplot.ThemeEngine
replot, jqPlot
ringColor, $.jqplot.MeterGaugeRenderer
ringMargin, $.jqplot.DonutRenderer
ringWidth, $.jqplot.MeterGaugeRenderer
rowSpacing, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralS.html b/public/javascripts/jqplot/docs/search/GeneralS.html new file mode 100644 index 0000000..4cfc865 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralS.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
sectionMargin, $.jqplot.FunnelRenderer
series, jqPlot
seriesColors, jqPlot
seriesLabelIndex, $.jqplot.PointLabels
shadowRenderer, $.jqplot.MarkerRenderer
shapeRenderer, $.jqplot.MarkerRenderer
showBorders, $.jqplot.MekkoRenderer
showCursorLegend, $.jqplot.Cursor
showHorizontalLine, $.jqplot.Cursor
showLine, Series
showLines, $.jqplot.LineRenderer
showSwatch, Legend
showTickLabels, $.jqplot.MeterGaugeRenderer
showTooltipDataPosition, $.jqplot.Cursor
showTooltipGridPosition, $.jqplot.Cursor
showTooltipOutsideZoom, $.jqplot.Cursor
showTooltipPrecision, $.jqplot.CanvasOverlay
showTooltipUnitPosition, $.jqplot.Cursor
showVerticalLine, $.jqplot.Cursor
sizeAdjust, $.jqplot.Highlighter
smooth, $.jqplot.LineRenderer
sortData, jqPlot
sortMergedLabels, $.jqplot.CategoryAxisRenderer
stackedValue, $.jqplot.PointLabels
stackSeries, jqPlot
start, Line
stop, Line
strokeRect, $.jqplot.shapeRenderer
strokeStyle, $.jqplot.shapeRenderer
suffix, $.jqplot.AxisTickRenderer
syncTicks, Axis
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralSymbols.html b/public/javascripts/jqplot/docs/search/GeneralSymbols.html new file mode 100644 index 0000000..5339661 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralSymbols.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralT.html b/public/javascripts/jqplot/docs/search/GeneralT.html new file mode 100644 index 0000000..20f4ead --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralT.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
text, Title
textAlign, Title
themes, $.jqplot.ThemeEngine
thickness, $.jqplot.DonutRenderer
tickColor, $.jqplot.MeterGaugeRenderer
tickLength, $.jqplot.OHLCRenderer
tickMode, $.jqplot.MekkoAxisRenderer
tickPadding, $.jqplot.MeterGaugeRenderer
title, jqPlot
tooltipAxes, $.jqplot.Highlighter
tooltipAxisGroups, $.jqplot.Cursor
transposedData, $.jqplot.BarRenderer
type, $.jqplot.Trendline
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralU.html b/public/javascripts/jqplot/docs/search/GeneralU.html new file mode 100644 index 0000000..31bcbf1 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralU.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
upBodyColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralV.html b/public/javascripts/jqplot/docs/search/GeneralV.html new file mode 100644 index 0000000..51af427 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralV.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
varyBarColor, $.jqplot.BarRenderer
varyBlockColors, $.jqplot.BlockRenderer
varyBubbleColors, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralW.html b/public/javascripts/jqplot/docs/search/GeneralW.html new file mode 100644 index 0000000..ce58976 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralW.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
waterfall, $.jqplot.BarRenderer
wickColor, $.jqplot.OHLCRenderer
widthRatio, $.jqplot.FunnelRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralX.html b/public/javascripts/jqplot/docs/search/GeneralX.html new file mode 100644 index 0000000..443e98c --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralX.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
xmax, HorizontalLine
xmin, HorizontalLine
xoffset, Legend
xpadding, $.jqplot.PointLabels
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralY.html b/public/javascripts/jqplot/docs/search/GeneralY.html new file mode 100644 index 0000000..8f6ea7a --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralY.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
y, HorizontalLine
yoffset, Legend
ypadding, $.jqplot.PointLabels
yvalues, $.jqplot.Highlighter
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/GeneralZ.html b/public/javascripts/jqplot/docs/search/GeneralZ.html new file mode 100644 index 0000000..1e8baa0 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/GeneralZ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
zoom, $.jqplot.Cursor
zoomProxy, $.jqplot.Cursor.$.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/HooksA.html b/public/javascripts/jqplot/docs/search/HooksA.html new file mode 100644 index 0000000..82b17cd --- /dev/null +++ b/public/javascripts/jqplot/docs/search/HooksA.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
addLegendRowHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/HooksE.html b/public/javascripts/jqplot/docs/search/HooksE.html new file mode 100644 index 0000000..fe46493 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/HooksE.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
eventListenerHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/HooksJ.html b/public/javascripts/jqplot/docs/search/HooksJ.html new file mode 100644 index 0000000..f94e003 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/HooksJ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/HooksP.html b/public/javascripts/jqplot/docs/search/HooksP.html new file mode 100644 index 0000000..eb28c71 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/HooksP.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
postDrawHooks, $.jqplot.$.jqplot
postDrawSeriesHooks, $.jqplot.$.jqplot
postDrawSeriesShadowHooks, $.jqplot.$.jqplot
postInitHooks, $.jqplot.$.jqplot
postParseOptionsHooks, $.jqplot.$.jqplot
postParseSeriesOptionsHooks, $.jqplot.$.jqplot
postSeriesInitHooks, $.jqplot.$.jqplot
preDrawHooks, $.jqplot.$.jqplot
preDrawLegendHooks, $.jqplot.$.jqplot
preDrawSeriesHooks, $.jqplot.$.jqplot
preDrawSeriesShadowHooks, $.jqplot.$.jqplot
preInitHooks, $.jqplot.$.jqplot
preParseOptionsHooks, $.jqplot.$.jqplot
preParseSeriesOptionsHooks, $.jqplot.$.jqplot
preSeriesInitHooks, $.jqplot.$.jqplot
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/NoResults.html b/public/javascripts/jqplot/docs/search/NoResults.html new file mode 100644 index 0000000..d2459c0 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/NoResults.html @@ -0,0 +1,15 @@ + + + + + + + + + + + + +
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesA.html b/public/javascripts/jqplot/docs/search/PropertiesA.html new file mode 100644 index 0000000..386d9e8 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesA.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
activeTheme, $.jqplot.ThemeEngine
alignTicks, $.jqplot.LinearAxisRenderer
alpha, $.jqplot.shadowRenderer
animate, jqPlot
autoscale, Axis
autoscaleBubbles, $.jqplot.BubbleRenderer
autoscaleMultiplier, $.jqplot.BubbleRenderer
autoscalePointsFactor, $.jqplot.BubbleRenderer
axes, jqPlot
axesDefaults, jqPlot
axisDefaults, $.jqplot.LogAxisRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesB.html b/public/javascripts/jqplot/docs/search/PropertiesB.html new file mode 100644 index 0000000..a6cef46 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesB.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
bandData, $.jqplot.LineRenderer
barDirection, $.jqplot.BarRenderer
barLabelOptions, $.jqplot.MekkoAxisRenderer
barLabelRenderer, $.jqplot.MekkoAxisRenderer
barLabels, $.jqplot.MekkoAxisRenderer
barMargin, $.jqplot.BarRenderer
barWidth, $.jqplot.BarRenderer
bodyWidth, $.jqplot.OHLCRenderer
border, Legend
breakOnNull, Series
breakPoints, $.jqplot.LinearAxisRenderer
breakTickLabel, $.jqplot.LinearAxisRenderer
bringSeriesToFront, $.jqplot.Highlighter
bubbleAlpha, $.jqplot.BubbleRenderer
bubbleGradients, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesC.html b/public/javascripts/jqplot/docs/search/PropertiesC.html new file mode 100644 index 0000000..a30bf3d --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesC.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
candleStick, $.jqplot.OHLCRenderer
clearRect, $.jqplot.shapeRenderer
clickReset, $.jqplot.Cursor
closeColor, $.jqplot.OHLCRenderer
constrainOutsideZoom, $.jqplot.Cursor
constrainSmoothing, $.jqplot.LineRenderer
constrainTo, $.jqplot.Dragable
constrainZoomTo, $.jqplot.Cursor
css, $.jqplot.BlockRenderer
cursorLegendFormatString, $.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesD.html b/public/javascripts/jqplot/docs/search/PropertiesD.html new file mode 100644 index 0000000..e0380ea --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesD.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesE.html b/public/javascripts/jqplot/docs/search/PropertiesE.html new file mode 100644 index 0000000..5bb760f --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesE.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
edgeTolerance, $.jqplot.PointLabels
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesF.html b/public/javascripts/jqplot/docs/search/PropertiesF.html new file mode 100644 index 0000000..cf90670 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesF.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesG.html b/public/javascripts/jqplot/docs/search/PropertiesG.html new file mode 100644 index 0000000..3a7573d --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesG.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
grid, jqPlot
groups, $.jqplot.BarRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesH.html b/public/javascripts/jqplot/docs/search/PropertiesH.html new file mode 100644 index 0000000..ca8f802 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesH.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
hideZeros, $.jqplot.PointLabels
highlightAlpha, $.jqplot.BubbleRenderer
highlightColor, $.jqplot.LineRenderer
hlc, $.jqplot.OHLCRenderer
hubRadius, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesI.html b/public/javascripts/jqplot/docs/search/PropertiesI.html new file mode 100644 index 0000000..289adc8 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesI.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
index, Series
innerDiameter, $.jqplot.DonutRenderer
insertBreaks, $.jqplot.BlockRenderer
intersectionThreshold, $.jqplot.Cursor
interval, $.jqplot.LineRenderer
intervalColors, $.jqplot.MeterGaugeRenderer
intervalInnerRadius, $.jqplot.MeterGaugeRenderer
intervalOuterRadius, $.jqplot.MeterGaugeRenderer
intervals, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesL.html b/public/javascripts/jqplot/docs/search/PropertiesL.html new file mode 100644 index 0000000..2465230 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesL.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesM.html b/public/javascripts/jqplot/docs/search/PropertiesM.html new file mode 100644 index 0000000..80a53cb --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesM.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
marginBottom, Legend
marginLeft, Legend
marginRight, Legend
marginTop, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesN.html b/public/javascripts/jqplot/docs/search/PropertiesN.html new file mode 100644 index 0000000..c601883 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesN.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
name, $.jqplot.CanvasOverlay
needlePad, $.jqplot.MeterGaugeRenderer
needleThickness, $.jqplot.MeterGaugeRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesO.html b/public/javascripts/jqplot/docs/search/PropertiesO.html new file mode 100644 index 0000000..e3e5f59 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesO.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
objects, $.jqplot.CanvasOverlay
offset, $.jqplot.shadowRenderer
openColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesP.html b/public/javascripts/jqplot/docs/search/PropertiesP.html new file mode 100644 index 0000000..f1a4b16 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesP.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
pad, Axis
padMax, Axis
padMin, Axis
pegNeedle, $.jqplot.MeterGaugeRenderer
placement, Legend
predraw, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesR.html b/public/javascripts/jqplot/docs/search/PropertiesR.html new file mode 100644 index 0000000..a462e09 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesR.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
ringColor, $.jqplot.MeterGaugeRenderer
ringMargin, $.jqplot.DonutRenderer
ringWidth, $.jqplot.MeterGaugeRenderer
rowSpacing, Legend
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesS.html b/public/javascripts/jqplot/docs/search/PropertiesS.html new file mode 100644 index 0000000..712da7f --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesS.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
sectionMargin, $.jqplot.FunnelRenderer
series, jqPlot
seriesColors, jqPlot
seriesLabelIndex, $.jqplot.PointLabels
shadowRenderer, $.jqplot.MarkerRenderer
shapeRenderer, $.jqplot.MarkerRenderer
showBorders, $.jqplot.MekkoRenderer
showCursorLegend, $.jqplot.Cursor
showHorizontalLine, $.jqplot.Cursor
showLine, Series
showLines, $.jqplot.LineRenderer
showSwatch, Legend
showTickLabels, $.jqplot.MeterGaugeRenderer
showTooltipDataPosition, $.jqplot.Cursor
showTooltipGridPosition, $.jqplot.Cursor
showTooltipOutsideZoom, $.jqplot.Cursor
showTooltipPrecision, $.jqplot.CanvasOverlay
showTooltipUnitPosition, $.jqplot.Cursor
showVerticalLine, $.jqplot.Cursor
sizeAdjust, $.jqplot.Highlighter
smooth, $.jqplot.LineRenderer
sortData, jqPlot
sortMergedLabels, $.jqplot.CategoryAxisRenderer
stackedValue, $.jqplot.PointLabels
stackSeries, jqPlot
start, Line
stop, Line
strokeRect, $.jqplot.shapeRenderer
strokeStyle, $.jqplot.shapeRenderer
suffix, $.jqplot.AxisTickRenderer
syncTicks, Axis
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesT.html b/public/javascripts/jqplot/docs/search/PropertiesT.html new file mode 100644 index 0000000..bc107de --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesT.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
text, Title
textAlign, Title
themes, $.jqplot.ThemeEngine
thickness, $.jqplot.DonutRenderer
tickColor, $.jqplot.MeterGaugeRenderer
tickLength, $.jqplot.OHLCRenderer
tickMode, $.jqplot.MekkoAxisRenderer
tickPadding, $.jqplot.MeterGaugeRenderer
title, jqPlot
tooltipAxes, $.jqplot.Highlighter
tooltipAxisGroups, $.jqplot.Cursor
transposedData, $.jqplot.BarRenderer
type, $.jqplot.Trendline
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesU.html b/public/javascripts/jqplot/docs/search/PropertiesU.html new file mode 100644 index 0000000..df97c19 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesU.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
upBodyColor, $.jqplot.OHLCRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesV.html b/public/javascripts/jqplot/docs/search/PropertiesV.html new file mode 100644 index 0000000..ebd8349 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesV.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
varyBarColor, $.jqplot.BarRenderer
varyBlockColors, $.jqplot.BlockRenderer
varyBubbleColors, $.jqplot.BubbleRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesW.html b/public/javascripts/jqplot/docs/search/PropertiesW.html new file mode 100644 index 0000000..ce58976 --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesW.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
waterfall, $.jqplot.BarRenderer
wickColor, $.jqplot.OHLCRenderer
widthRatio, $.jqplot.FunnelRenderer
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesX.html b/public/javascripts/jqplot/docs/search/PropertiesX.html new file mode 100644 index 0000000..443e98c --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesX.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
xmax, HorizontalLine
xmin, HorizontalLine
xoffset, Legend
xpadding, $.jqplot.PointLabels
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesY.html b/public/javascripts/jqplot/docs/search/PropertiesY.html new file mode 100644 index 0000000..8f6ea7a --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesY.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
y, HorizontalLine
yoffset, Legend
ypadding, $.jqplot.PointLabels
yvalues, $.jqplot.Highlighter
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/search/PropertiesZ.html b/public/javascripts/jqplot/docs/search/PropertiesZ.html new file mode 100644 index 0000000..9da6ccf --- /dev/null +++ b/public/javascripts/jqplot/docs/search/PropertiesZ.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + +
Loading...
zoom, $.jqplot.Cursor
Searching...
No Matches
\ No newline at end of file diff --git a/public/javascripts/jqplot/docs/styles/1.css b/public/javascripts/jqplot/docs/styles/1.css new file mode 100644 index 0000000..17e9cbc --- /dev/null +++ b/public/javascripts/jqplot/docs/styles/1.css @@ -0,0 +1,767 @@ +/* + IMPORTANT: If you're editing this file in the output directory of one of + your projects, your changes will be overwritten the next time you run + Natural Docs. Instead, copy this file to your project directory, make your + changes, and you can use it with -s. Even better would be to make a CSS + file in your project directory with only your changes, which you can then + use with -s [original style] [your changes]. + + On the other hand, if you're editing this file in the Natural Docs styles + directory, the changes will automatically be applied to all your projects + that use this style the next time Natural Docs is run on them. + + This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure + Natural Docs is licensed under the GPL +*/ + +body { + font: 10pt Verdana, Arial, sans-serif; + color: #000000; + margin: 0; padding: 0; + } + +.ContentPage, +.IndexPage, +.FramedMenuPage { + background-color: #E8E8E8; + } +.FramedContentPage, +.FramedIndexPage, +.FramedSearchResultsPage, +.PopupSearchResultsPage { + background-color: #FFFFFF; + } + + +a:link, +a:visited { color: #900000; text-decoration: none } +a:hover { color: #900000; text-decoration: underline } +a:active { color: #FF0000; text-decoration: underline } + +td { + vertical-align: top } + +img { border: 0; } + + +/* + Comment out this line to use web-style paragraphs (blank line between + paragraphs, no indent) instead of print-style paragraphs (no blank line, + indented.) +*/ +p { + text-indent: 5ex; margin: 0 } + + +/* Opera doesn't break with just wbr, but will if you add this. */ +.Opera wbr:after { + content: "\00200B"; + } + + +/* Blockquotes are used as containers for things that may need to scroll. */ +blockquote { + padding: 0; + margin: 0; + overflow: auto; + } + + +.Firefox1 blockquote { + padding-bottom: .5em; + } + +/* Turn off scrolling when printing. */ +@media print { + blockquote { + overflow: visible; + } + .IE blockquote { + width: auto; + } + } + + + +#Menu { + font-size: 9pt; + padding: 10px 0 0 0; + } +.ContentPage #Menu, +.IndexPage #Menu { + position: absolute; + top: 0; + left: 0; + width: 31ex; + overflow: hidden; + } +.ContentPage .Firefox #Menu, +.IndexPage .Firefox #Menu { + width: 27ex; + } + + + .MTitle { + font-size: 16pt; font-weight: bold; font-variant: small-caps; + text-align: center; + padding: 5px 10px 15px 10px; + border-bottom: 1px dotted #000000; + margin-bottom: 15px } + + .MSubTitle { + font-size: 9pt; font-weight: normal; font-variant: normal; + margin-top: 1ex; margin-bottom: 5px } + + + .MEntry a:link, + .MEntry a:hover, + .MEntry a:visited { color: #606060; margin-right: 0 } + .MEntry a:active { color: #A00000; margin-right: 0 } + + + .MGroup { + font-variant: small-caps; font-weight: bold; + margin: 1em 0 1em 10px; + } + + .MGroupContent { + font-variant: normal; font-weight: normal } + + .MGroup a:link, + .MGroup a:hover, + .MGroup a:visited { color: #545454; margin-right: 10px } + .MGroup a:active { color: #A00000; margin-right: 10px } + + + .MFile, + .MText, + .MLink, + .MIndex { + padding: 1px 17px 2px 10px; + margin: .25em 0 .25em 0; + } + + .MText { + font-size: 8pt; font-style: italic } + + .MLink { + font-style: italic } + + #MSelected { + color: #000000; background-color: #FFFFFF; + /* Replace padding with border. */ + padding: 0 10px 0 10px; + border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000; + margin-right: 5px; + } + + /* Close off the left side when its in a group. */ + .MGroup #MSelected { + padding-left: 9px; border-left-width: 1px } + + /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ + .Firefox #MSelected { + -moz-border-radius-topright: 10px; + -moz-border-radius-bottomright: 10px } + .Firefox .MGroup #MSelected { + -moz-border-radius-topleft: 10px; + -moz-border-radius-bottomleft: 10px } + + + #MSearchPanel { + padding: 0px 6px; + margin: .25em 0; + } + + + #MSearchField { + font: italic 9pt Verdana, sans-serif; + color: #606060; + background-color: #E8E8E8; + border: none; + padding: 2px 4px; + width: 100%; + } + /* Only Opera gets it right. */ + .Firefox #MSearchField, + .IE #MSearchField, + .Safari #MSearchField { + width: 94%; + } + .Opera9 #MSearchField, + .Konqueror #MSearchField { + width: 97%; + } + .FramedMenuPage .Firefox #MSearchField, + .FramedMenuPage .Safari #MSearchField, + .FramedMenuPage .Konqueror #MSearchField { + width: 98%; + } + + /* Firefox doesn't do this right in frames without #MSearchPanel added on. + It's presence doesn't hurt anything other browsers. */ + #MSearchPanel.MSearchPanelInactive:hover #MSearchField { + background-color: #FFFFFF; + border: 1px solid #C0C0C0; + padding: 1px 3px; + } + .MSearchPanelActive #MSearchField { + background-color: #FFFFFF; + border: 1px solid #C0C0C0; + font-style: normal; + padding: 1px 3px; + } + + #MSearchType { + visibility: hidden; + font: 8pt Verdana, sans-serif; + width: 98%; + padding: 0; + border: 1px solid #C0C0C0; + } + .MSearchPanelActive #MSearchType, + /* As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */ + #MSearchPanel.MSearchPanelInactive:hover #MSearchType, + #MSearchType:focus { + visibility: visible; + color: #606060; + } + #MSearchType option#MSearchEverything { + font-weight: bold; + } + + .Opera8 .MSearchPanelInactive:hover, + .Opera8 .MSearchPanelActive { + margin-left: -1px; + } + + + iframe#MSearchResults { + width: 60ex; + height: 15em; + } + #MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000000; + background-color: #E8E8E8; + } + #MSearchResultsWindowClose { + font-weight: bold; + font-size: 8pt; + display: block; + padding: 2px 5px; + } + #MSearchResultsWindowClose:link, + #MSearchResultsWindowClose:visited { + color: #000000; + text-decoration: none; + } + #MSearchResultsWindowClose:active, + #MSearchResultsWindowClose:hover { + color: #800000; + text-decoration: none; + background-color: #F4F4F4; + } + + + + +#Content { + padding-bottom: 15px; + } + +.ContentPage #Content { + border-width: 0 0 1px 1px; + border-style: solid; + border-color: #000000; + background-color: #FFFFFF; + font-size: 9pt; /* To make 31ex match the menu's 31ex. */ + margin-left: 31ex; + } +.ContentPage .Firefox #Content { + margin-left: 27ex; + } + + + + .CTopic { + font-size: 10pt; + margin-bottom: 3em; + } + + + .CTitle { + font-size: 12pt; font-weight: bold; + border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0; + margin: 0 15px .5em 15px } + + .CGroup .CTitle { + font-size: 16pt; font-variant: small-caps; + padding-left: 15px; padding-right: 15px; + border-width: 0 0 2px 0; border-color: #000000; + margin-left: 0; margin-right: 0 } + + .CClass .CTitle, + .CInterface .CTitle, + .CDatabase .CTitle, + .CDatabaseTable .CTitle, + .CSection .CTitle { + font-size: 18pt; + color: #FFFFFF; background-color: #A0A0A0; + padding: 10px 15px 10px 15px; + border-width: 2px 0; border-color: #000000; + margin-left: 0; margin-right: 0 } + + #MainTopic .CTitle { + font-size: 20pt; + color: #FFFFFF; background-color: #7070C0; + padding: 10px 15px 10px 15px; + border-width: 0 0 3px 0; border-color: #000000; + margin-left: 0; margin-right: 0 } + + .CBody { + margin-left: 15px; margin-right: 15px } + + + .CToolTip { + position: absolute; visibility: hidden; + left: 0; top: 0; + background-color: #FFFFE0; + padding: 5px; + border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000; + font-size: 8pt; + } + + .Opera .CToolTip { + max-width: 98%; + } + + /* Scrollbars would be useless. */ + .CToolTip blockquote { + overflow: hidden; + } + .IE6 .CToolTip blockquote { + overflow: visible; + } + + .CHeading { + font-weight: bold; font-size: 10pt; + margin: 1.5em 0 .5em 0; + } + + .CBody pre { + font: 10pt "Courier New", Courier, monospace; + margin: 1em 0; + } + + .CBody ul { + /* I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever. + Reapply it here as padding. */ + padding-left: 15px; padding-right: 15px; + margin: .5em 5ex .5em 5ex; + } + + .CDescriptionList { + margin: .5em 5ex 0 5ex } + + .CDLEntry { + font: 10pt "Courier New", Courier, monospace; color: #808080; + padding-bottom: .25em; + white-space: nowrap } + + .CDLDescription { + font-size: 10pt; /* For browsers that don't inherit correctly, like Opera 5. */ + padding-bottom: .5em; padding-left: 5ex } + + + .CTopic img { + text-align: center; + display: block; + margin: 1em auto; + } + .CImageCaption { + font-variant: small-caps; + font-size: 8pt; + color: #808080; + text-align: center; + position: relative; + top: 1em; + } + + .CImageLink { + color: #808080; + font-style: italic; + } + a.CImageLink:link, + a.CImageLink:visited, + a.CImageLink:hover { color: #808080 } + + + + + +.Prototype { + font: 10pt "Courier New", Courier, monospace; + padding: 5px 3ex; + border-width: 1px; border-style: solid; + margin: 0 5ex 1.5em 5ex; + } + + .Prototype td { + font-size: 10pt; + } + + .PDefaultValue, + .PDefaultValuePrefix, + .PTypePrefix { + color: #8F8F8F; + } + .PTypePrefix { + text-align: right; + } + .PAfterParameters { + vertical-align: bottom; + } + + .IE .Prototype table { + padding: 0; + } + + .CFunction .Prototype { + background-color: #F4F4F4; border-color: #D0D0D0 } + .CProperty .Prototype { + background-color: #F4F4FF; border-color: #C0C0E8 } + .CVariable .Prototype { + background-color: #FFFFF0; border-color: #E0E0A0 } + + .CClass .Prototype { + border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; + background-color: #F4F4F4; + } + .CInterface .Prototype { + border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0D0; + background-color: #F4F4FF; + } + + .CDatabaseIndex .Prototype, + .CConstant .Prototype { + background-color: #D0D0D0; border-color: #000000 } + .CType .Prototype, + .CEnumeration .Prototype { + background-color: #FAF0F0; border-color: #E0B0B0; + } + .CDatabaseTrigger .Prototype, + .CEvent .Prototype, + .CDelegate .Prototype { + background-color: #F0FCF0; border-color: #B8E4B8 } + + .CToolTip .Prototype { + margin: 0 0 .5em 0; + white-space: nowrap; + } + + + + + +.Summary { + margin: 1.5em 5ex 0 5ex } + + .STitle { + font-size: 12pt; font-weight: bold; + margin-bottom: .5em } + + + .SBorder { + background-color: #FFFFF0; + padding: 15px; + border: 1px solid #C0C060 } + + /* In a frame IE 6 will make them too long unless you set the width to 100%. Without frames it will be correct without a width + or slightly too long (but not enough to scroll) with a width. This arbitrary weirdness simply astounds me. IE 7 has the same + problem with frames, haven't tested it without. */ + .FramedContentPage .IE .SBorder { + width: 100% } + + /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ + .Firefox .SBorder { + -moz-border-radius: 20px } + + + .STable { + font-size: 9pt; width: 100% } + + .SEntry { + width: 30% } + .SDescription { + width: 70% } + + + .SMarked { + background-color: #F8F8D8 } + + .SDescription { padding-left: 2ex } + .SIndent1 .SEntry { padding-left: 1.5ex } .SIndent1 .SDescription { padding-left: 3.5ex } + .SIndent2 .SEntry { padding-left: 3.0ex } .SIndent2 .SDescription { padding-left: 5.0ex } + .SIndent3 .SEntry { padding-left: 4.5ex } .SIndent3 .SDescription { padding-left: 6.5ex } + .SIndent4 .SEntry { padding-left: 6.0ex } .SIndent4 .SDescription { padding-left: 8.0ex } + .SIndent5 .SEntry { padding-left: 7.5ex } .SIndent5 .SDescription { padding-left: 9.5ex } + + .SDescription a { color: #800000} + .SDescription a:active { color: #A00000 } + + .SGroup td { + padding-top: .5em; padding-bottom: .25em } + + .SGroup .SEntry { + font-weight: bold; font-variant: small-caps } + + .SGroup .SEntry a { color: #800000 } + .SGroup .SEntry a:active { color: #F00000 } + + + .SMain td, + .SClass td, + .SDatabase td, + .SDatabaseTable td, + .SSection td { + font-size: 10pt; + padding-bottom: .25em } + + .SClass td, + .SDatabase td, + .SDatabaseTable td, + .SSection td { + padding-top: 1em } + + .SMain .SEntry, + .SClass .SEntry, + .SDatabase .SEntry, + .SDatabaseTable .SEntry, + .SSection .SEntry { + font-weight: bold; + } + + .SMain .SEntry a, + .SClass .SEntry a, + .SDatabase .SEntry a, + .SDatabaseTable .SEntry a, + .SSection .SEntry a { color: #000000 } + + .SMain .SEntry a:active, + .SClass .SEntry a:active, + .SDatabase .SEntry a:active, + .SDatabaseTable .SEntry a:active, + .SSection .SEntry a:active { color: #A00000 } + + + + + +.ClassHierarchy { + margin: 0 15px 1em 15px } + + .CHEntry { + border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; + margin-bottom: 3px; + padding: 2px 2ex; + font-size: 10pt; + background-color: #F4F4F4; color: #606060; + } + + .Firefox .CHEntry { + -moz-border-radius: 4px; + } + + .CHCurrent .CHEntry { + font-weight: bold; + border-color: #000000; + color: #000000; + } + + .CHChildNote .CHEntry { + font-style: italic; + font-size: 8pt; + } + + .CHIndent { + margin-left: 3ex; + } + + .CHEntry a:link, + .CHEntry a:visited, + .CHEntry a:hover { + color: #606060; + } + .CHEntry a:active { + color: #800000; + } + + + + + +#Index { + background-color: #FFFFFF; + } + +/* As opposed to .PopupSearchResultsPage #Index */ +.IndexPage #Index, +.FramedIndexPage #Index, +.FramedSearchResultsPage #Index { + padding: 15px; + } + +.IndexPage #Index { + border-width: 0 0 1px 1px; + border-style: solid; + border-color: #000000; + font-size: 9pt; /* To make 27ex match the menu's 27ex. */ + margin-left: 27ex; + } + + + .IPageTitle { + font-size: 20pt; font-weight: bold; + color: #FFFFFF; background-color: #7070C0; + padding: 10px 15px 10px 15px; + border-width: 0 0 3px 0; border-color: #000000; border-style: solid; + margin: -15px -15px 0 -15px } + + .FramedSearchResultsPage .IPageTitle { + margin-bottom: 15px; + } + + .INavigationBar { + font-size: 10pt; + text-align: center; + background-color: #FFFFF0; + padding: 5px; + border-bottom: solid 1px black; + margin: 0 -15px 15px -15px; + } + + .INavigationBar a { + font-weight: bold } + + .IHeading { + font-size: 16pt; font-weight: bold; + padding: 2.5em 0 .5em 0; + text-align: center; + width: 3.5ex; + } + #IFirstHeading { + padding-top: 0; + } + + .IEntry { + font-size: 10pt; + padding-left: 1ex; + } + .PopupSearchResultsPage .IEntry { + font-size: 8pt; + padding: 1px 5px; + } + .PopupSearchResultsPage .Opera9 .IEntry, + .FramedSearchResultsPage .Opera9 .IEntry { + text-align: left; + } + .FramedSearchResultsPage .IEntry { + padding: 0; + } + + .ISubIndex { + padding-left: 3ex; padding-bottom: .5em } + .PopupSearchResultsPage .ISubIndex { + display: none; + } + + /* While it may cause some entries to look like links when they aren't, I found it's much easier to read the + index if everything's the same color. */ + .ISymbol { + font-weight: bold; color: #900000 } + + .IndexPage .ISymbolPrefix, + .FramedIndexPage .ISymbolPrefix { + font-size: 10pt; + text-align: right; + color: #C47C7C; + background-color: #F8F8F8; + border-right: 3px solid #E0E0E0; + border-left: 1px solid #E0E0E0; + padding: 0 1px 0 2px; + } + .PopupSearchResultsPage .ISymbolPrefix, + .FramedSearchResultsPage .ISymbolPrefix { + color: #900000; + } + .PopupSearchResultsPage .ISymbolPrefix { + font-size: 8pt; + } + + .IndexPage #IFirstSymbolPrefix, + .FramedIndexPage #IFirstSymbolPrefix { + border-top: 1px solid #E0E0E0; + } + .IndexPage #ILastSymbolPrefix, + .FramedIndexPage #ILastSymbolPrefix { + border-bottom: 1px solid #E0E0E0; + } + .IndexPage #IOnlySymbolPrefix, + .FramedIndexPage #IOnlySymbolPrefix { + border-top: 1px solid #E0E0E0; + border-bottom: 1px solid #E0E0E0; + } + + a.IParent, + a.IFile { + display: block; + } + + .PopupSearchResultsPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + } + .FramedSearchResultsPage .SRStatus { + font-size: 10pt; + font-style: italic; + } + + .SRResult { + display: none; + } + + + +#Footer { + font-size: 8pt; + color: #989898; + text-align: right; + } + +#Footer p { + text-indent: 0; + margin-bottom: .5em; + } + +.ContentPage #Footer, +.IndexPage #Footer { + text-align: right; + margin: 2px; + } + +.FramedMenuPage #Footer { + text-align: center; + margin: 5em 10px 10px 10px; + padding-top: 1em; + border-top: 1px solid #C8C8C8; + } + + #Footer a:link, + #Footer a:hover, + #Footer a:visited { color: #989898 } + #Footer a:active { color: #A00000 } + diff --git a/public/javascripts/jqplot/docs/styles/2.css b/public/javascripts/jqplot/docs/styles/2.css new file mode 100644 index 0000000..12117d4 --- /dev/null +++ b/public/javascripts/jqplot/docs/styles/2.css @@ -0,0 +1,174 @@ +html, body { + height: 100%; +} + +/* +div.Firefox { + height: 100%; +} +*/ + +.MTitle { + font-variant: normal; +} + +.MLink { + font-style: normal; +} + +.CBody { +margin-left: 30px; +margin-right: 30px; +} + +p { + text-indent: 0; + margin-bottom: 1em; + } + +.CBody p { +/* + padding-top: 4px; + padding-bottom: 4px; +*/ +} + +#Menu { + margin-top: 94px; + border: 0px; +} + +body.ContentPage { + background-image: url('../../images/background.jpg'); + background-color: #818181; + background-position: left top; + background-repeat: repeat-x; +} + +.MGroup a:link, +.MGroup a:hover, +.MGroup a:visited { color: #bfbfbf; margin-right: 10px } +.MGroup a:active { color: #f58f07; margin-right: 10px } + + +.MEntry a:link, +.MEntry a:hover, +.MEntry a:visited { color: #bfbfbf; margin-right: 0 } +.MEntry a:active { color: #f58f07; margin-right: 0 } + +#Footer { + color: #bfbfbf; +} + +#Footer a:link, #Footer a:hover, #Footer a:visited { + color: #5c93f0; +} + +#MainTopic div.CTitle.logo { + color: #292929; + font-size: 0px; + font-style: normal; + font-weight: normal; + border-width: 0px; + padding: 0px; + margin: 0px; + background-position: left top; + background-repeat: no-repeat; + background-image: url('../../images/logo.jpg'); + background-color: #292929; + height: 94px; + position: relative; + +} + +#MainTopic h1.CTitle a { + display: none; +} + + +#MainTopic div.CBody p:first-child { + margin-top: 24px; +} + +.ContentPage #Content { + border: 0px; +/* height: 100%; */ +} + +#IPageLogo { + width: 780px; + color: #292929; + font-style: normal; + font-weight: normal; + border-width: 0px; + padding: 0px; + margin: 0px; + background-position: left top; + background-repeat: no-repeat; + background-image: url('../../images/logo.jpg'); + background-color: #292929; + height: 94px; + position: relative; + left: 27ex; +} + +#Menu, #IPageLogo { + font-size: 9pt; +} + +body.IndexPage { + background-image: url('../../images/background.jpg'); +} + +/*#IPageLogo:hover { + cursor: pointer; +}*/ + +.IPageTitle { + background-color:#FFFFF0; + color: #333333; + border: 0px; +} + + + +div.nav { + position:relative; + top: 70px; + text-align: right; +} + +a.nav span { + font-size: 11px; + position: relative; + bottom: 2px; +} + +a.nav:visited { + text-decoration: none; + border: 0px; + color: #aaaaaa; +} + +a.nav, a.nav:link { + border: 0px; + text-decoration: none; + font-family: Tahoma, "Helvetica Neue", "Trebuchet MS", Verdana, Arial, sans-serif; + font-size: 16px; + color: #aaaaaa; + margin-right: 11px; +} + +a.nav:hover { + text-decoration: none; + border: 0px; + color: #E0771C; +} + +a.nav:active { + text-decoration: none; + border: 0px; + color: #E0771C; +} + + diff --git a/public/javascripts/jqplot/docs/styles/main.css b/public/javascripts/jqplot/docs/styles/main.css new file mode 100644 index 0000000..a672a94 --- /dev/null +++ b/public/javascripts/jqplot/docs/styles/main.css @@ -0,0 +1,2 @@ +@import URL("1.css"); +@import URL("2.css"); diff --git a/public/javascripts/jqplot/examples/KCPsample4.csv b/public/javascripts/jqplot/examples/KCPsample4.csv new file mode 100644 index 0000000..453517b --- /dev/null +++ b/public/javascripts/jqplot/examples/KCPsample4.csv @@ -0,0 +1,25 @@ +Product or service,v01,v02,v03,v04,v05,v06,v07,v08,v09,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20 +Rice,15.8442,13.0993,11.2898,10.7892,10.252,9.0165,8.5287,7.7442,6.9867,6.5213,5.9473,5.4766,4.9214,4.6398,3.8935,3.5228,3.0128,2.4847,2.0357,1.0672 +Bread and other cereals,1.7703,2.2535,2.2753,2.7927,2.2509,2.4341,2.5518,2.5547,2.4204,2.4186,2.4261,2.2927,2.4386,2.2295,2.2203,1.915,1.8791,1.7941,1.6567,0.9296 +Meat,8.3728,8.1221,8.3989,7.9758,8.8246,8.2377,8.432,7.8466,7.5343,7.1171,6.9801,6.9349,5.8307,5.7089,4.927,4.2237,3.6872,3.1429,2.581,1.3766 +Fish and seafood,9.1249,8.7326,7.6122,7.8577,7.1625,6.8527,6.5158,6.1715,6.1298,5.8702,5.3456,4.9906,4.4424,4.3022,3.5298,3.405,2.9977,2.4159,2.0832,1.1499 +Fruits and vegetables,8.0508,7.7875,7.6534,7.4448,7.3702,7.4188,7.3882,7.1647,6.9617,6.6576,6.6077,6.4823,5.9117,5.8149,5.505,5.5355,5.0907,4.569,4.3049,2.6325 +Other food products,10.4408,9.8278,9.9293,9.5176,9.6658,9.2359,9.2842,8.6497,8.7656,8.2962,8.155,7.7294,7.3674,6.9888,6.2995,5.7314,5.2703,4.6947,3.9614,2.2509 +Catering services,4.1883,4.7514,5.3198,5.8819,5.1732,5.5764,6.1713,6.7915,6.8511,7.2681,7.1461,8.109,9.2649,9.5322,11.2138,12.8299,12.9621,13.8936,13.7828,10.0525 +Non-alcoholic beverages,0.6641,0.8454,0.9018,1.0461,1.0113,1.235,1.279,1.3049,1.5024,1.4471,1.5358,1.5796,1.6471,1.6443,1.6562,1.6763,1.6097,1.5039,1.3752,0.864 +Alcoholic beverages,0.5221,0.6997,0.8513,0.8849,0.9168,0.9099,0.8339,0.9921,1.1169,1.1764,1.1936,1.1415,1.1181,1.2889,1.1378,1.023,1.1283,1.0417,0.9839,0.587 +Tobacco and narcotics,1.0969,1.188,1.0713,1.2803,1.1787,1.148,1.3229,1.1726,1.3764,1.3887,1.4011,1.3034,1.4368,1.5017,1.4899,1.4123,1.3168,1.1407,0.8458,0.38 +Clothing and footwear,2.275,2.5511,3.1025,2.9834,3.2857,3.7625,3.1928,3.7071,4.0364,3.629,3.9258,3.2208,3.7113,3.3166,3.4775,3.429,3.6121,3.4569,3.8416,4.1323 +Rentals (actual or imputed) and maintenance and repair of the dwelling,16.0654,15.719,16.3773,16.0175,15.8853,16.132,16.1309,16.3491,15.8512,16.4743,16.2862,15.7327,16.2793,16.6329,17.4903,17.4425,17.3413,18.3527,18.5029,15.2763 +Water supply and miscellaneous services related to the dwelling,1.1145,1.176,1.1183,1.0411,1.0058,1.0796,1.0321,1.0714,1.1117,1.0278,1.136,1.1397,1.1556,1.2206,1.2871,1.2361,1.2111,1.2312,1.1545,0.7881 +Electricity gas and other fuels,4.5928,4.7558,4.8855,4.4684,4.6677,4.6038,4.7789,4.6098,4.4171,4.5078,4.4137,4.4645,4.2693,4.2836,4.1709,4.159,3.8423,3.9957,3.6816,2.5785 +Furnishing household equipment and routine household maintenance,2.1027,2.1576,2.0721,2.0623,2.3498,2.2573,2.2866,2.3766,2.2488,2.3665,2.3445,2.2474,2.3345,2.2479,2.158,2.355,2.0744,2.2269,3.0474,3.8925 +Health,1.2709,1.6007,1.3996,1.612,1.4649,1.5875,1.7056,1.7315,1.7378,2.0401,2.3265,2.1096,2.0513,2.1548,2.0634,2.2206,1.8427,2.4817,2.3066,2.1685 +Transport,4.6414,5.6167,5.9571,6.5372,7.0242,7.6332,7.9823,8.3906,9.112,9.6872,10.2014,11.0074,11.375,11.6753,12.0489,12.0692,13.2962,13.2183,14.6559,32.0912 +Communication,0.2334,0.3642,0.5267,0.5911,0.8888,1.1633,1.0997,1.76,1.9811,2.1708,2.931,3.2634,3.6254,4.107,4.6944,5.0941,5.9984,6.2419,6.6059,5.8353 +Recreation and culture,2.2553,2.8903,2.9564,3.2839,3.4822,3.255,3.1666,3.4245,3.4066,3.8536,3.6333,4.0331,4.4847,4.3552,4.2768,4.1439,4.7196,4.6585,4.4286,3.921 +Education,0.3437,0.3282,0.4805,0.3881,0.4796,0.9766,0.6589,0.6443,1.0423,0.7941,1.064,1.5504,1.3977,1.5226,1.8344,1.9186,2.3022,2.8188,2.8424,2.7792 +Personal care,3.4466,3.5641,3.5711,3.4219,3.2835,3.3569,3.3416,3.4544,3.3675,3.2806,3.118,3.1881,3.2252,3.0588,3.0051,2.9868,3.0361,2.8972,2.9611,2.2867 +Other miscellaneous goods and services,1.5831,1.9691,2.2498,2.122,2.3766,2.1273,2.3165,2.0884,2.0421,2.0067,1.8809,2.0027,1.7115,1.7734,1.6204,1.6702,1.769,1.7391,2.3607,2.9604 +Food and non-alcoholic beverages,58.4561,55.4196,53.3806,53.3059,51.7105,50.007,50.1509,48.2276,47.1521,45.5962,44.1436,43.5952,41.8242,40.8606,39.2451,38.8396,36.5095,34.4988,31.7809,20.3231 +Non food,41.5439,44.5804,46.6194,46.6941,48.2895,49.993,49.8491,51.7724,52.8479,54.4038,55.8564,56.4048,58.1758,59.1394,60.7549,61.1604,63.4905,65.5012,68.2191,79.6769 diff --git a/public/javascripts/jqplot/examples/ages.json b/public/javascripts/jqplot/examples/ages.json new file mode 100644 index 0000000..8691618 --- /dev/null +++ b/public/javascripts/jqplot/examples/ages.json @@ -0,0 +1,5 @@ +[[1043353182,539695335,503657847,28.24,27.51,29.01,51.78], +[0.0085318435343400800,0.0088774027062416400,0.0094714560875224100,0.0101640893891056000,0.0108249758696292000,0.0113773174183149000,0.0117954271696904000,0.0120868766491156000,0.0122726357410028000,0.0123620512208843000,0.0124092312631522000,0.0123929933989534000,0.0123170841477326000,0.0121788940682660000,0.0119848553256476000,0.0117367932349178000,0.0114334768233470000,0.0110840887113746000,0.0107005336950161000,0.0102889073661635000,0.0098746874267631800,0.0094727992165526500,0.0091066817836288100,0.0087853078056091400,0.0085176451289595700,0.0082955898249666400,0.0081021034227657000,0.0079410857437656400,0.0078129432771183200,0.0077041517746791700,0.0076076629996558600,0.0075063773837400400,0.0074212932416191700,0.0073577960797626100,0.0073199937766648000,0.0072872222696609900,0.0072249036551971000,0.0071436496521446000,0.0070535868312601700,0.0069442503777637000,0.0068032069975035000,0.0066093294501292200,0.0063936409488174700,0.0061768176372133200,0.0059737878831400300,0.0057724507581444500,0.0055456647375558400,0.0053139201135624000,0.0050952395722700100,0.0048873227886988200,0.0046839194356973000,0.0044709211871979300,0.0042683374557587400,0.0040886232834079100,0.0039394433696905200,0.0038097165950705600,0.0036797119436340500,0.0035595490798891500,0.0034559622921317600,0.0033586853733251200,0.0032515219944251700,0.0031141174480235800,0.0029601056879342400,0.0027997057390388600,0.0026388958299152400,0.0024706340765107900,0.0022829305753990900,0.0020900571013307600,0.0019037152224417700,0.0017251049256371200,0.0015499961243315000,0.0013709889555399900,0.0011982773790103000,0.0010401790931594200,0.0009015220565900700,0.0007812832602556460,0.0006749752626942340,0.0005833580512023270,0.0005061657847658260,0.0004399544894590220,0.0003808034210932470,0.0003273788998735520,0.0002794993115460400,0.0002369793671257210,0.0001995479850687680,0.0001668101805315270,0.0001383186716039340,0.0001138075253115040,0.0000929924552954457,0.0000755223736670678,0.0000610047525059652,0.0000490638302928227,0.0000396489252832302,0.0000330891826825378,0.0000281195284929135,0.0001070412478036410], +[0.0071192629623232800,0.0072839317935624000,0.0075693293189514500,0.0079091875498352200,0.0082360857829773300,0.0084979038169712600,0.0086893986451354100,0.0088353986277422900,0.0089633895658643000,0.0090878796761182500,0.0092337667384807200,0.0093792123312149900,0.0095192745279032600,0.0096463104169553400,0.0097588790000607600,0.0098544841215461300,0.0099282199747865200,0.0099763812248601700,0.0099957597226035700,0.0099801585489242500,0.0099375446097938400,0.0098709094654945100,0.0097926096630396900,0.0097014318757340600,0.0095968423362564000,0.0094699215837397400,0.0093120985109391200,0.0091337644254482100,0.0089445678055607600,0.0087423328014590000,0.0085321350430430500,0.0083104164267343500,0.0081040369311665900,0.0079207770770160300,0.0077675098774536000,0.0076284130950824500,0.0074765938644635800,0.0073237591351693500,0.0071772210497332700,0.0070244435483804400,0.0068550745015274400,0.0066526057090785200,0.0064404461001358000,0.0062305720357510500,0.0060342707683446500,0.0058408705961082800,0.0056264339860478000,0.0054065565344313600,0.0051920462742280000,0.0049765895152515200,0.0047558832991186200,0.0045207003388048400,0.0042899070487080500,0.0040745089551306800,0.0038817655555785800,0.0037053224400247200,0.0035332134254902200,0.0033727187145046400,0.0032284905944481100,0.0030937679725170100,0.0029582187048090100,0.0028081834596732200,0.0026513461722362800,0.0024926069125082600,0.0023353006048059200,0.0021744630786167700,0.0020021420693961100,0.0018298895084829500,0.0016671380010344600,0.0015153637133401800,0.0013712248188900700,0.0012284616818527500,0.0010934572254154500,0.0009707133813897040,0.0008622603131043950,0.0007661899219731710,0.0006786114871838230,0.0006005435486257860,0.0005322956370150040,0.0004715229254612440,0.0004158721219136000,0.0003645948643149670,0.0003176904909297340,0.0002751152300590630,0.0002367021156783720,0.0002021700726755280,0.0001712214234345020,0.0001437557719387760,0.0001197138111336940,0.0000989925882290494,0.0000814263200020563,0.0000667991474109870,0.0000549164545704749,0.0000455518367647343,0.0000384480445034309,0.0001437755914949950], +[1.284165231,1.3059697282,1.3408259576,1.3770498469,1.4083776842,1.4346340126,1.4545779876,1.4658887137,1.4671638972,1.457608962,1.4400548643,1.4158684686,1.3864911961,1.3528812542,1.3159697978,1.27622903,1.2340137083,1.1905291022,1.1471037258,1.1047013276,1.0647737249,1.0283340659,0.9964942039,0.9703629438,0.9510519527,0.9386721807,0.932316307,0.9316292996,0.9359838821,0.9443012277,0.9554470086,0.9678781103,0.9812761433,0.9953894103,1.0098153246,1.0236249732,1.035479081,1.0451994053,1.0530930686,1.0593183708,1.0634438538,1.0645809137,1.0637641578,1.0623066923,1.0608111193,1.0589993944,1.0561690641,1.0531914677,1.0515722425,1.052330754,1.0553372965,1.0597522653,1.0661637808,1.0752634417,1.0874733411,1.1017415355,1.1159815378,1.1309096828,1.1470504754,1.1633078085,1.1777943775,1.1882903501,1.1963378464,1.2035708256,1.2108560457,1.2175013424,1.2218302494,1.2239011525,1.223611334,1.2198647763,1.2112533925,1.1958739376,1.1742717733,1.1482333683,1.1203430352,1.0926602484,1.0658097999,1.040887396,1.0189501507,0.9998112064,0.9811922123,0.9621730704,0.9427349027,0.9230154312,0.903354613,0.8841353287,0.8656369091,0.8483181293,0.8323701879,0.8174967062,0.8028084248,0.7870522949,0.7736454722,0.7783827557,0.7836945697,0.7977724963], +[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,"95+", ""]] \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/ages.json.bak b/public/javascripts/jqplot/examples/ages.json.bak new file mode 100644 index 0000000..46c3410 --- /dev/null +++ b/public/javascripts/jqplot/examples/ages.json.bak @@ -0,0 +1,20 @@ +[[[27777522,13657657,14119865,22.9618524272778,22.9234010487667,22.9984003916577,95.1543545247194], +[0.0635441,0.1066868,0.0889602,0.0816883,0.10164580000000001,0.0916705,0.079569,0.0970443,0.1046451,0.13356859999999998,0.09269619999999999,0.0936646,0.09194050000000001,0.0722027,0.0896342,0.0993397,0.061379399999999994,0.0916921,0.0828748,0.043487,0.0391652,0.05173029999999999,0.0507104,0.0336168,0.0554176,0.06918260000000001,0.066553,0.0686232,0.07097,0.0356915,0.0756028,0.0430155,0.0420597,0.06085890000000001,0.0609348,0.083607,0.079871,0.063388,0.0866719,0.07110419999999999,0.11604289999999999,0.0439268,0.0659694,0.046840599999999996,0.0340002,0.09966620000000001,0.037104700000000004,0.0638918,0.0462334,0.0467053,0.054563799999999996,0.0463275,0.048099199999999995,0.051574699999999994,0.0499415,0.0287639,0.0520332,0.0443779,0.0334986,0.043161,0.047440500000000003,0.0179186,0.0620127,0.0219074,0.0411669,0.0495684,0.0315231,0.0275056,0.0157341,0.0113926,0.024991,0.012811300000000001,0.017529700000000002,0.0103093,0.025329200000000003,0.0988836], +[0.0767078,0.0679554,0.1064493,0.0915063,0.0860792,0.0785728,0.0892471,0.0687886,0.1055313,0.0921839,0.0659624,0.11451599999999999,0.0910735,0.1279864,0.0714669,0.0873929,0.09284529999999999,0.059575199999999995,0.1093534,0.0501142,0.052829,0.041160600000000006,0.0633309,0.0616121,0.0621781,0.0621598,0.0638378,0.0703724,0.0742589,0.048523,0.0735727,0.08988159999999999,0.0740614,0.0991105,0.148909,0.12269959999999999,0.1020624,0.0737742,0.09468170000000001,0.069129,0.0933744,0.0957472,0.0793112,0.0581121,0.0767528,0.1031739,0.1202133,0.0626926,0.0959522,0.059430300000000005,0.1202145,0.0611707,0.0480779,0.0383338,0.053287600000000004,0.0849878,0.05245300000000001,0.0660183,0.025419000000000004,0.0137567,0.0762322,0.0490294,0.0463194,0.0566921,0.0353006,0.0730591,0.034669,0.0271638,0.0309785,0.0152756,0.0478111,0.0177234,0.026930199999999998,0.0396318,0.0194934,0.1683044], +[0.08012745758,0.15185614577,0.08083484276,0.08634844480000001,0.11421861070999999,0.11285038043,0.08623735826,0.13645806801,0.09591427898,0.14015059741,0.13592869247,0.07911429639999999,0.09764735666999999,0.05456765264,0.121314988,0.10994927001000002,0.06394526214,0.14887167252,0.07330538177,0.08393523364,0.07170899168,0.12156511277,0.07745100072,0.05277594468,0.08620965831,0.10765468343,0.10084059099,0.09432227357,0.0924425572,0.07114801921,0.09939552755,0.04629134908,0.05493130422,0.059395027600000004,0.0395813042,0.06590906497,0.07569531533,0.08310902697,0.08854375327,0.09949027633,0.12020884008999999,0.04437610101,0.08045511693,0.07796533275,0.04284823143,0.09343803786,0.02985534283,0.09857675082,0.04660650676,0.07601580528,0.04390292048,0.07325564077999999,0.0967693938,0.13013691132,0.09065276996,0.03273684636,0.09595240406,0.06502016503,0.12747172211,0.30347497827000003,0.0601944515,0.03535030403,0.12949809292,0.037377818480000005,0.11280068435999999,0.0656260462,0.08794947713,0.09794364354,0.049127784359999996,0.07213901846000001,0.0505592422,0.06991845436,0.06296229678000001,0.025161181890000002,0.12568386739999998,0.0568295813]], +[[27749565,13838477,13911088,24.5976082172601,24.9314069236505,24.2580664163534,77.8912115153135], +[0.0635441,0.1066868,0.0889602,0.0816883,0.10164580000000001,0.0916705,0.079569,0.0970443,0.1046451,0.13356859999999998,0.09269619999999999,0.0936646,0.09194050000000001,0.0722027,0.0896342,0.0993397,0.061379399999999994,0.0916921,0.0828748,0.043487,0.0391652,0.05173029999999999,0.0507104,0.0336168,0.0554176,0.06918260000000001,0.066553,0.0686232,0.07097,0.0356915,0.0756028,0.0430155,0.0420597,0.06085890000000001,0.0609348,0.083607,0.079871,0.063388,0.0866719,0.07110419999999999,0.11604289999999999,0.0439268,0.0659694,0.046840599999999996,0.0340002,0.09966620000000001,0.037104700000000004,0.0638918,0.0462334,0.0467053,0.054563799999999996,0.0463275,0.048099199999999995,0.051574699999999994,0.0499415,0.0287639,0.0520332,0.0443779,0.0334986,0.043161,0.047440500000000003,0.0179186,0.0620127,0.0219074,0.0411669,0.0495684,0.0315231,0.0275056,0.0157341,0.0113926,0.024991,0.012811300000000001,0.017529700000000002,0.0103093,0.025329200000000003,0.0988836], +[0.0767078,0.0679554,0.1064493,0.0915063,0.0860792,0.0785728,0.0892471,0.0687886,0.1055313,0.0921839,0.0659624,0.11451599999999999,0.0910735,0.1279864,0.0714669,0.0873929,0.09284529999999999,0.059575199999999995,0.1093534,0.0501142,0.052829,0.041160600000000006,0.0633309,0.0616121,0.0621781,0.0621598,0.0638378,0.0703724,0.0742589,0.048523,0.0735727,0.08988159999999999,0.0740614,0.0991105,0.148909,0.12269959999999999,0.1020624,0.0737742,0.09468170000000001,0.069129,0.0933744,0.0957472,0.0793112,0.0581121,0.0767528,0.1031739,0.1202133,0.0626926,0.0959522,0.059430300000000005,0.1202145,0.0611707,0.0480779,0.0383338,0.053287600000000004,0.0849878,0.05245300000000001,0.0660183,0.025419000000000004,0.0137567,0.0762322,0.0490294,0.0463194,0.0566921,0.0353006,0.0730591,0.034669,0.0271638,0.0309785,0.0152756,0.0478111,0.0177234,0.026930199999999998,0.0396318,0.0194934,0.1683044], +[0.08240677231,0.15617586288000002,0.08313427985,0.08880472244,0.11746768624,0.11606053513,0.08869047591,0.14033976966,0.09864266742,0.14413733717,0.13979533545,0.08136479062999999,0.10042504443,0.056119890260000006,0.12476592788,0.11307689939000001,0.06576425631,0.15310649297,0.07539063496000001,0.0863228648,0.07374883377,0.12502316773,0.07965418065999999,0.054277215180000005,0.08866198801,0.11071704075,0.10370911384999999,0.09700537564,0.09507218864,0.07317190382,0.10222294398000001,0.04760815804,0.05649388631,0.061084585270000005,0.04070723846,0.0677839217,0.07784855284,0.08547315576,0.0910624789,0.10232038799000001,0.12362831435999999,0.045638428599999996,0.0827437523,0.08018314344000001,0.04406709707,0.09609598687000001,0.03070461129,0.10138087623,0.04793228073,0.07817815948,0.04515178793,0.07533947903,0.09952210692999999,0.13383880063,0.09323148892000001,0.0336680824,0.09868187701,0.06686973601,0.13109779715,0.31210766186,0.06190674968,0.03635588278,0.13318181034,0.03844107214,0.1160094254,0.06749285214,0.09045129791999999,0.10072975952,0.05052527888,0.07419109314,0.051997456129999994,0.07190736263,0.0647533294,0.025876919720000002,0.12925908492,0.058446162010000004]], +[[27773083,14068521,13704562,26.031249743982,26.4622397434507,25.5923334000026,66.9928635958906], +[0.0635441,0.1066868,0.0889602,0.0816883,0.10164580000000001,0.0916705,0.079569,0.0970443,0.1046451,0.13356859999999998,0.09269619999999999,0.0936646,0.09194050000000001,0.0722027,0.0896342,0.0993397,0.061379399999999994,0.0916921,0.0828748,0.043487,0.0391652,0.05173029999999999,0.0507104,0.0336168,0.0554176,0.06918260000000001,0.066553,0.0686232,0.07097,0.0356915,0.0756028,0.0430155,0.0420597,0.06085890000000001,0.0609348,0.083607,0.079871,0.063388,0.0866719,0.07110419999999999,0.11604289999999999,0.0439268,0.0659694,0.046840599999999996,0.0340002,0.09966620000000001,0.037104700000000004,0.0638918,0.0462334,0.0467053,0.054563799999999996,0.0463275,0.048099199999999995,0.051574699999999994,0.0499415,0.0287639,0.0520332,0.0443779,0.0334986,0.043161,0.047440500000000003,0.0179186,0.0620127,0.0219074,0.0411669,0.0495684,0.0315231,0.0275056,0.0157341,0.0113926,0.024991,0.012811300000000001,0.017529700000000002,0.0103093,0.025329200000000003,0.0988836], +[0.0767078,0.0679554,0.1064493,0.0915063,0.0860792,0.0785728,0.0892471,0.0687886,0.1055313,0.0921839,0.0659624,0.11451599999999999,0.0910735,0.1279864,0.0714669,0.0873929,0.09284529999999999,0.059575199999999995,0.1093534,0.0501142,0.052829,0.041160600000000006,0.0633309,0.0616121,0.0621781,0.0621598,0.0638378,0.0703724,0.0742589,0.048523,0.0735727,0.08988159999999999,0.0740614,0.0991105,0.148909,0.12269959999999999,0.1020624,0.0737742,0.09468170000000001,0.069129,0.0933744,0.0957472,0.0793112,0.0581121,0.0767528,0.1031739,0.1202133,0.0626926,0.0959522,0.059430300000000005,0.1202145,0.0611707,0.0480779,0.0383338,0.053287600000000004,0.0849878,0.05245300000000001,0.0660183,0.025419000000000004,0.0137567,0.0762322,0.0490294,0.0463194,0.0566921,0.0353006,0.0730591,0.034669,0.0271638,0.0309785,0.0152756,0.0478111,0.0177234,0.026930199999999998,0.0396318,0.0194934,0.1683044], +[0.08503916535,0.16116472779,0.08578991231000001,0.0916414909,0.12122006133,0.11976796032999999,0.0915235949,0.14482276812,0.10179369814000001,0.14874164471,0.14426094256,0.08396389872,0.10363301120999999,0.057912577980000005,0.12875143722,0.11668901566,0.06786502261,0.15799731026,0.07779890527,0.08908035308,0.07610465856000001,0.12901689431000002,0.08219864521,0.05601104069,0.09149419698,0.11425377395,0.10702198658999999,0.10010410488999999,0.09810916438,0.07550929921,0.10548834266,0.0491289479,0.05829852092,0.06303586467,0.04200758609,0.06994920397,0.08033533861,0.08820350101999999,0.09397136889999999,0.10558889942000001,0.12757748389,0.04709629764,0.08538690978999999,0.08274450512,0.04547477166,0.0991656667,0.031685436080000004,0.104619376,0.04946342433,0.08067547417000001,0.04659411177,0.07774611522,0.10270123037000001,0.13811413283,0.09620966553,0.03474357199,0.10183416024,0.06900581564,0.13528557103,0.32207759532,0.06388429221,0.03751723118,0.13743615571,0.03966902959,0.11971521796,0.06964883652000001,0.09334066442,0.10394746008,0.052139252930000005,0.07656104541,0.05365845725,0.07420436366,0.06682180277000001,0.026703529250000003,0.13338812317999998,0.0603131599]], +[[27763227,14197178,13566049,27.1801825364803,27.2072646746751,27.152230557176,58.6206806491801], +[0.0635441,0.1066868,0.0889602,0.0816883,0.10164580000000001,0.0916705,0.079569,0.0970443,0.1046451,0.13356859999999998,0.09269619999999999,0.0936646,0.09194050000000001,0.0722027,0.0896342,0.0993397,0.061379399999999994,0.0916921,0.0828748,0.043487,0.0391652,0.05173029999999999,0.0507104,0.0336168,0.0554176,0.06918260000000001,0.066553,0.0686232,0.07097,0.0356915,0.0756028,0.0430155,0.0420597,0.06085890000000001,0.0609348,0.083607,0.079871,0.063388,0.0866719,0.07110419999999999,0.11604289999999999,0.0439268,0.0659694,0.046840599999999996,0.0340002,0.09966620000000001,0.037104700000000004,0.0638918,0.0462334,0.0467053,0.054563799999999996,0.0463275,0.048099199999999995,0.051574699999999994,0.0499415,0.0287639,0.0520332,0.0443779,0.0334986,0.043161,0.047440500000000003,0.0179186,0.0620127,0.0219074,0.0411669,0.0495684,0.0315231,0.0275056,0.0157341,0.0113926,0.024991,0.012811300000000001,0.017529700000000002,0.0103093,0.025329200000000003,0.0988836], +[0.0767078,0.0679554,0.1064493,0.0915063,0.0860792,0.0785728,0.0892471,0.0687886,0.1055313,0.0921839,0.0659624,0.11451599999999999,0.0910735,0.1279864,0.0714669,0.0873929,0.09284529999999999,0.059575199999999995,0.1093534,0.0501142,0.052829,0.041160600000000006,0.0633309,0.0616121,0.0621781,0.0621598,0.0638378,0.0703724,0.0742589,0.048523,0.0735727,0.08988159999999999,0.0740614,0.0991105,0.148909,0.12269959999999999,0.1020624,0.0737742,0.09468170000000001,0.069129,0.0933744,0.0957472,0.0793112,0.0581121,0.0767528,0.1031739,0.1202133,0.0626926,0.0959522,0.059430300000000005,0.1202145,0.0611707,0.0480779,0.0383338,0.053287600000000004,0.0849878,0.05245300000000001,0.0660183,0.025419000000000004,0.0137567,0.0762322,0.0490294,0.0463194,0.0566921,0.0353006,0.0730591,0.034669,0.0271638,0.0309785,0.0152756,0.0478111,0.0177234,0.026930199999999998,0.0396318,0.0194934,0.1683044], +[0.08669306385,0.1642991671,0.08745841185,0.09342379585,0.12357763008,0.12209728765000001,0.09330360693,0.14763937807,0.10377345,0.15163447160000001,0.14706662576,0.08559688473,0.10564853525,0.059038900490000004,0.1312554812,0.11895846161000001,0.06918490692,0.16107014750999998,0.07931199036,0.09081284731,0.07758479281,0.13152610108,0.08379729938,0.05710038083,0.09327363726,0.11647585767999999,0.10910342170000001,0.10205099641,0.10001725696,0.07697785452,0.10753995044,0.050084440509999995,0.05943234951,0.06426182829,0.04282457769,0.07130962283,0.08189775395,0.08991894164,0.09579898687,0.10764246288999998,0.13005869604,0.0480122579,0.08704757146,0.08435377554,0.04635919541,0.10109430684000001,0.032301675610000004,0.10665408353000001,0.05042542206,0.0822445047,0.047500305189999995,0.07925817361000001,0.10469863252,0.14080026877000001,0.09808081538999999,0.035419288189999995,0.10381469903,0.07034788685,0.13791669521,0.3283415756,0.06512675661,0.03824689136,0.1401091059,0.04044053939,0.12204351951,0.07100341363,0.09515601602,0.10596909973999999,0.05315329196,0.07805005578,0.05470204278,0.0756475397,0.06812139784,0.02722287733,0.13598234452,0.061486170529999995]], +[[27754352,14075999,13678353,29.1168227998273,29.25251358929,28.974780426636,50.90167162031], +[0.0635441,0.1066868,0.0889602,0.0816883,0.10164580000000001,0.0916705,0.079569,0.0970443,0.1046451,0.13356859999999998,0.09269619999999999,0.0936646,0.09194050000000001,0.0722027,0.0896342,0.0993397,0.061379399999999994,0.0916921,0.0828748,0.043487,0.0391652,0.05173029999999999,0.0507104,0.0336168,0.0554176,0.06918260000000001,0.066553,0.0686232,0.07097,0.0356915,0.0756028,0.0430155,0.0420597,0.06085890000000001,0.0609348,0.083607,0.079871,0.063388,0.0866719,0.07110419999999999,0.11604289999999999,0.0439268,0.0659694,0.046840599999999996,0.0340002,0.09966620000000001,0.037104700000000004,0.0638918,0.0462334,0.0467053,0.054563799999999996,0.0463275,0.048099199999999995,0.051574699999999994,0.0499415,0.0287639,0.0520332,0.0443779,0.0334986,0.043161,0.047440500000000003,0.0179186,0.0620127,0.0219074,0.0411669,0.0495684,0.0315231,0.0275056,0.0157341,0.0113926,0.024991,0.012811300000000001,0.017529700000000002,0.0103093,0.025329200000000003,0.0988836], +[0.0767078,0.0679554,0.1064493,0.0915063,0.0860792,0.0785728,0.0892471,0.0687886,0.1055313,0.0921839,0.0659624,0.11451599999999999,0.0910735,0.1279864,0.0714669,0.0873929,0.09284529999999999,0.059575199999999995,0.1093534,0.0501142,0.052829,0.041160600000000006,0.0633309,0.0616121,0.0621781,0.0621598,0.0638378,0.0703724,0.0742589,0.048523,0.0735727,0.08988159999999999,0.0740614,0.0991105,0.148909,0.12269959999999999,0.1020624,0.0737742,0.09468170000000001,0.069129,0.0933744,0.0957472,0.0793112,0.0581121,0.0767528,0.1031739,0.1202133,0.0626926,0.0959522,0.059430300000000005,0.1202145,0.0611707,0.0480779,0.0383338,0.053287600000000004,0.0849878,0.05245300000000001,0.0660183,0.025419000000000004,0.0137567,0.0762322,0.0490294,0.0463194,0.0566921,0.0353006,0.0730591,0.034669,0.0271638,0.0309785,0.0152756,0.0478111,0.0177234,0.026930199999999998,0.0396318,0.0194934,0.1683044], +[0.08524739676000001,0.16155936429,0.08599998204,0.09186588912,0.12151688721000001,0.12006123050999999,0.09174770443,0.14517738883,0.10204295559000001,0.14910586138999998,0.14461418755,0.08416949718,0.1038867725,0.058054385789999996,0.12906670482,0.11697474658,0.06803120051,0.15838419085,0.07798940778999999,0.08929847996,0.07629101246,0.12933281191999998,0.08239992117,0.056148192289999996,0.09171823453,0.1145335418,0.10728404630999999,0.10034922511,0.09834939968,0.07569419529,0.10574664702,0.04924924765,0.05844127377,0.06319021764,0.04211044809,0.07012048531000001,0.08053205197999999,0.08841948079,0.09420147217,0.10584745,0.12788987689,0.04721162013,0.08559599271,0.08294711769999999,0.0455861236,0.09940848901,0.03176302272,0.10487555256,0.04958454309,0.08087302042,0.04670820459,0.07793648848,0.10295271005,0.13845232642,0.09644524963,0.03482864694,0.10208351676,0.06917478694,0.13561683846,0.32286625161,0.06404072268,0.03760909786,0.13777268917000002,0.03976616528,0.12000835899,0.06981938236,0.09356922331999999,0.10420199135,0.05226692387,0.07674851685,0.053789848200000004,0.0743860644,0.06698542618,0.026768916929999997,0.13371474441,0.060460845900000004]]] \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/ajax-loader.gif b/public/javascripts/jqplot/examples/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..3288d1035d70bb86517e2c233f1a904e41f06b29 GIT binary patch literal 3208 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/area.html b/public/javascripts/jqplot/examples/area.html new file mode 100644 index 0000000..2aa5288 --- /dev/null +++ b/public/javascripts/jqplot/examples/area.html @@ -0,0 +1,229 @@ + + + + + + Filled (Area) Charts + + + + + + + + + + + + + +
+ + + + + + + + +

Area charts support highlighting and mouse events by default. The options and handlers and callbacks are essentially the same as with bar, pie, donut and funnel charts. One notable exception for area charts is that no data point index will be provided to the callback and the entire data set for the highlighted area will be returned. This is because the area is not associated with one particular data point, but with the entire data set of the series.

+ +
Moused Over: Nothing
+ +
+ +

For the chart below, mouseover has been disabled and click handling is enabled by setting "highlightMouseDown: true". For "fillToZero" area charts that have both negative and positive values as shown below, clicking in either the positive of negative regions will generate the same result.

+ +
You Clicked: Nothing yet
+ +
+ +
+ +
I'm a tooltip.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/axisLabelTests.html b/public/javascripts/jqplot/examples/axisLabelTests.html new file mode 100644 index 0000000..88d3fbb --- /dev/null +++ b/public/javascripts/jqplot/examples/axisLabelTests.html @@ -0,0 +1,157 @@ + + + + + + Line Charts and Options + + + + + + + + + + + + + +
+ + + + + + +

jqPlot support axis labels through the "label" option of each axis. The default label renderer creates labels in div tags, which allows full css control over every label. Labels are assigned css classes like "jqplot-axis_name-label" where "axis_name" will be xaxis, yaxis, etc.

+ +
+ +

+
+
+

By including the "jqplot.canvasTextRenderer.min.js" and "jqplot.canvasAxisLabelRenderer.min.js" plugins, you can render label text directly onto canvas elements. This allows text to be rotated and yaxes will have their labels rotated 90 degrees by default. By default the labels will be rendered using the Hershey font metrics and not stroked as text. Most recent browsers (include IE 9) support native text rendering in canvas elements.

+ +
+ +

+
+      
+

If a visitors is using a browser suppporting native canvas fonts, the plot belowsupported browser, they will see the labels in the plot below rendered as 12 pt Georgia (or their system serif font if Georgia is unavailable). If they are on an unsupported browser, they will see the default Hershey font.

+ +
+ +

+
+
+  
+
+  
+
+  
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+  
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/axisLabelsRotatedText.html b/public/javascripts/jqplot/examples/axisLabelsRotatedText.html new file mode 100644 index 0000000..5f886ec --- /dev/null +++ b/public/javascripts/jqplot/examples/axisLabelsRotatedText.html @@ -0,0 +1,229 @@ + + + + + + Axis Labels and Rotated Text + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/axisScalingForceTickAt.html b/public/javascripts/jqplot/examples/axisScalingForceTickAt.html new file mode 100644 index 0000000..f9b8056 --- /dev/null +++ b/public/javascripts/jqplot/examples/axisScalingForceTickAt.html @@ -0,0 +1,242 @@ + + + + + + Force Plot to Have Tick at 0 or 100 + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+

+
+

+
+

+
+

+
+

+
+ +
+ + +
+
+ + +
+ +

+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+  
+  
+  
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/bandedLine.html b/public/javascripts/jqplot/examples/bandedLine.html new file mode 100644 index 0000000..1da1926 --- /dev/null +++ b/public/javascripts/jqplot/examples/bandedLine.html @@ -0,0 +1,310 @@ + + + + + + Error Bands and Confidence Intervals + + + + + + + + + + + + + +
+ + + + + +

Bands (like confidence intervals or error bands) can be added to line charts through the "bands" option of the line renderer. The band data can be automatically computed or manually assigned. If assigned manually, the simpliest approach is to set the "rendererOptions: { bandData: [] }" array on the series. Note that band data is taken into account when axes scale themselves so bands will not get clipped.

+ + +

Band data can be supplied as arrays of [x,y] values. One array for the upper band line and one for the lower band line.

+ +
+

+
+
+

The number of points in the band data arrays does not have to correspond to the number of points in the data series. Also, band data will be drawn as smoothed lines if the data series is smoothed.

+ +
+

+
+

In this example, band data is supplied as an array of arrays of y values for the low and hi bands. X values for the bands are taken from the x values of the series. The band data is of the form: [ [y low 1, y hi 1], [y low 2, y hi 2], ... ] and there must be a corresponding array of low/hi y values for each x value in the data series.

+ +
+

+
+

The band data can also be supplied as an array of [low y values], [hi y values]. In this case there must also be an equal number of low y values and hi y values as there are data points in the series. X values for the low and hi bands will be taken from the series data. Additionally, the order of low/hi values does not matter as long as they are consistent. jqPlot will figure out which is the low values and which are the high values.

+ +
+

+
+

Band data does not have to be provided. By default, jqPlot will compute +/- 3% band intervals if the "rendererOptions: { bands: { show: true } }" option is set. The band intervals can be customized as well through the "rendererOptions: { bands: { interval: [number|string|arry] } }" option. Valid intervals are:

+ +
    +
  • '1.7' - will add bands at y +/- 1.7 above and below the line.
  • +
  • '10%' - will compute +/- 10% interval bands.
  • +
  • [3, '-10%'] - will add bands at y + 3 and y - 10% above and below the line.
  • +
+ +

Examples of such interval specifications are shown below:

+ +
+

+ 
+

+
+ 
+

+    
+

You can also customize the fill color of the bands and turn on/off band lines. By default, bands respond to the mouse over event, but they can be set to respond to mouse down as well.

+
+

+
+

Note, the plots on this page all extend the following pre-defined theme:

+ +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+    
+    
+    
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/bar-charts.html b/public/javascripts/jqplot/examples/bar-charts.html new file mode 100644 index 0000000..67e9dcc --- /dev/null +++ b/public/javascripts/jqplot/examples/bar-charts.html @@ -0,0 +1,219 @@ + + + + + + Vertical and Horizontal Bar Charts + + + + + + + + + + + + + +
+ + + + + + + + + +
+ +

+
+    
+ +

+
+    

Click on a bar in the plot below to update the text box.

+

You Clicked: + Nothing yet. +

+
+ +

+
+  
+  
+
+
+
+    
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/barLineAnimated.html b/public/javascripts/jqplot/examples/barLineAnimated.html new file mode 100644 index 0000000..7f48524 --- /dev/null +++ b/public/javascripts/jqplot/examples/barLineAnimated.html @@ -0,0 +1,165 @@ + + + + + + Animated Charts + + + + + + + + + + + + + +
+ + + + + + +
+ +

This plot animates the bars bottom to top and the line series left to right upon initial page load. Since the animateReplot: true option is set, the bars and line will also animate upon calls to plot1.replot( { resetAxes: true } ).

+ +

+
+
+ 
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+  
+   
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/barTest.html b/public/javascripts/jqplot/examples/barTest.html new file mode 100644 index 0000000..f28ad68 --- /dev/null +++ b/public/javascripts/jqplot/examples/barTest.html @@ -0,0 +1,299 @@ + + + + + + Bar Charts + + + + + + + + + + + + + +
+ + + + + + +

Below is a default bar plot. Bars will highlight on mouseover. Events are triggered when you mouseover a bar and also when you click on a bar. Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values. When series data is assigned as a 1-dimensional array as in this example, jqPlot automatically converts it into a 2-dimensional array for plotting. So a series defined as [2, 6, 7, 10] will become [[1,2], [2,6], [3,7], [4,10]].

+ +

You Clicked: Nothing yet
+ +
+

+
+    

The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a bar even if highlighting is turned off. This event will fire continuously as the user mouses over the bar. 'jqplotDataHighlight' fires only once when the user first passes over the bar. Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a bar (if highlighting is enabled).

+ +

Moused Over: Nothing
+ +
+

+    
+    
Moused Over: Nothing
+
Clicked: Nothing
+ +
+

+    
+    

The next example has the plot's 'captureRightClick' option set to true. This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a bar. Here, the 'highlightMouseDown' option is also set to true. This will highlight a slice on mouse down instead of on move over. Highlighting will occur for either left or right click.

+ +
You Right Clicked: Nothing yet
+ +
+

+    
+    
+

+    
+    
+

+        
+

A pie chart is added to test for incompatibilities.

+
+

+
+

The nex example shows the placement of point labels on negative bars. They shou be placed on the opposite position. That is, if it is placed 'north' to the positive bars, then it should be placed 'south' to the negative bars.

+
+

+
+  
+    
+  
+    
+  
+    
+  
+    
+  
+    
+  
+
+   
+
+     
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+  
+  
+  
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/bezierCurve.html b/public/javascripts/jqplot/examples/bezierCurve.html new file mode 100644 index 0000000..4741fb5 --- /dev/null +++ b/public/javascripts/jqplot/examples/bezierCurve.html @@ -0,0 +1,125 @@ + + + + + + Bezier Curve Plots + + + + + + + + + + + + + +
+ + + + + + +

The Bezier curve renderer can distinguish between two different input data formats. This first example has the data passed in as 2 data points, the second one defining the Bezier curve to the end point. With this format, non-default axes renderers will require specifying the minimum and maximum on the axes.

+
+    [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]];
+
+
+

This second example has the data broken out into 4 points, which will be assembled to define the Bezier Curve. With this format, any axes renderer can be used without explicitly specifying the minimum and maximum.

+
+    [[xstart, ystart], [cp1x, cp1y], [cp2x, cp2y], [xend, yend]];
+
+
+

Here is an example using a date axis renderer with Bezier curves. The data looks like:

+
+    [['01/01/2010', 6], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 3]]
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/blockPlot.html b/public/javascripts/jqplot/examples/blockPlot.html new file mode 100644 index 0000000..cfbe68b --- /dev/null +++ b/public/javascripts/jqplot/examples/blockPlot.html @@ -0,0 +1,199 @@ + + + + + + Block Plots + + + + + + + + + + + + + +
+ + + + + + +

Below is an example block plot. This plot also uses the Enhanced Legend Renderer plugin. Clicking on an item in the legend will toggle display of the appropriate series.

+ +
+ +

Blocks can be moved by selecting the series, the point, and an optional duration parameter. If specified, duration will animate the movement. Duration is either a number in milliseconds, or the keywords 'fast' or 'slow'. Higher numbers will cause a slower animation.

+ Series: + Point: + Duration: + X: + Y: + +

+    
+    
+    

This second chart is like the first except the "varyBlockColors" renderer option is set to true. This will vary the color of each block in a series separately. This allows displaying a third dimension to the data such as grouping beverage products by producer and by category such as "cola", "tea", "energy drink", etc.

+ +

Also, the legend has it's "showSwathces" option set to false, since the blocks of each series will be of varying color and won't correspond to one swatch color. This still enables the user to show and hide the series by clicking on a label in the legend.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/bubble-plots.html b/public/javascripts/jqplot/examples/bubble-plots.html new file mode 100644 index 0000000..d210b98 --- /dev/null +++ b/public/javascripts/jqplot/examples/bubble-plots.html @@ -0,0 +1,213 @@ + + + + + + Bubble Plots + + + + + + + + + + + + + +
+ + + + + + + + +

Bubble charts represent 3 dimensional data. First, a basic bubble chart with the "bubbleGradients: true" option to specify gradient fills. Radial gradients are not supported in IE version before IE 9 and will be automatically disabled.

+ +
+ +

+
+
+

Data is passed in to a bubble chart as a series of [x, y, radius, <label or object>]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.

+ +

By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.

+ +

Next are some basic customizations of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.

+ +
+ +

+
+
+

In the following example, display of a custom toolip and highlighting of a custom table legend is performed by binding to the "jqplotDataHighlight" and "jqplotDataUnhighlight" events. The custom legend table here is dynamically created with a few lines of jQuery (O.K., it could be done in one line) based on the data array of the plot.

+ + + + + + +
CompanyR Value
+ +

+
+
+
+  
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/bubbleChart.html b/public/javascripts/jqplot/examples/bubbleChart.html new file mode 100644 index 0000000..628d906 --- /dev/null +++ b/public/javascripts/jqplot/examples/bubbleChart.html @@ -0,0 +1,264 @@ + + + + + + Bubble Charts + + + + + + + + + + + + + +
+ + + + + + + + + +

Bubble charts represent 3 dimensional data. Data is passed in to a bubble chart as a series of [x, y, radius, <label or object>]. The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.

+ +

By default, all bubbles are scaled according to the size of the plot area. The radius value in the data point will be adjusted to fit the bubbles in the chart. If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.

+ +

The below chart show basic customization of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.

+ +
+

+
+
+
+
+    
+    
+
CompanyR Value
+

+
+

Below is a basic bubble chart showing usage of the optional label and color properties passed in with the data.

+ +
+

+
+

The next chart uses the "bubbleGradients: true" option to specify gradient fills on the bubbles. Radial gradients are not supported in IE* and will be automatically disabled.

+ +
+ +

*Radial gradients are not supported in IE 7 and IE 8 because they are not supported in the excanvas emulation layer used by jqPlot to render charts in IE 7 and IE 8. jqPlot renders charts using the HTML canvas element which is supported by nearly every browser including IE 9. Excanvas translates the canvas rendering to VML rendering for IE 7 and 8, but unfortunately does not properly handle radial gradients.

+ +

+
+

The following bubble chart shows the "autoscalePointsFactor" and "autoscaleMultiplier" options which can be used to control bubble scaling. The "autoscalePointsFactor" options controls bubble scaling with the number of points on the plot. A negative value will decrease bubble size and number of bubbles increases. The "autoscaleMultiplier" will makes all bubbles larger or smaller for values greater or less than 1.0.

+ +

This chart also demonstrates some of the highlighting options. Bubble highlighting is controlled with the "highlightMouseOver" and "highlightMouseDown" boolean options. Here the "highlightMouseDown: true" option is set which causes the plot to highlight on mousedown (click). This automatically sets the "highlightMouseOver" option to false.

+ +

Events are also trigger with plot interaction. Specifically, "jqplotDataHighlight", "jqplotDataUnhighlight", "jqplotDataClick" and "jqplotDataRightClick" events are triggered. Handlers are passed an event object, the series index, the point index, and the bubble data.

+ +
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/candlestick-charts.html b/public/javascripts/jqplot/examples/candlestick-charts.html new file mode 100644 index 0000000..c0262e3 --- /dev/null +++ b/public/javascripts/jqplot/examples/candlestick-charts.html @@ -0,0 +1,209 @@ + + + + + + Open Hi Low Close and Candlestick Charts + + + + + + + + + + + + + +
+ + + + + + +

OHLC, HLC and Candlestick charts are all created using the $.jqplot.OHLCRenderer plugin. The plots on this page make use of the highlighter plugin which shows a customized tooltip as the mouse moves over a data point.

+
+ +

+
+
+ +

+
+

The previous plots use the following data set. jqPlot will parse most human readable date formats. It is always safest, however, to pass a date in as a JavaScript timestamp rather than have jqPlot parse an arbitrary date string.

+ +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/candlestick.html b/public/javascripts/jqplot/examples/candlestick.html new file mode 100644 index 0000000..b213d6e --- /dev/null +++ b/public/javascripts/jqplot/examples/candlestick.html @@ -0,0 +1,322 @@ + + + + + + Candlestick and Open Hi Low Close charts + + + + + + + + + + + + + +
+ + + + + + +
+

+
+

+
+

+
+

+
+

+

The examples on this page use the folowing code:

+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+    
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/canvas-overlay.html b/public/javascripts/jqplot/examples/canvas-overlay.html new file mode 100644 index 0000000..c1ff2f0 --- /dev/null +++ b/public/javascripts/jqplot/examples/canvas-overlay.html @@ -0,0 +1,231 @@ + + + + + + Draw Lines on Plots - Canvas Overlay + + + + + + + + + + + + + +
+ + + + + + + +
+ + + +

+
+    
+

+
+  
+  
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+  
+  
+  
+  
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/colorpicker/README b/public/javascripts/jqplot/examples/colorpicker/README new file mode 100644 index 0000000..a0a0cc5 --- /dev/null +++ b/public/javascripts/jqplot/examples/colorpicker/README @@ -0,0 +1,140 @@ +jQuery.colorpicker v0.6 + +Copyright (c) 2011 Martijn W. van der Lee +Licensed under the MIT. + +Full-featured colorpicker for jQueryUI with full theming support. +Most images from jPicker by Christopher T. Tillman. +Sourcecode created from scratch by Martijn W. van der Lee. + +IE support; make sure you have a doctype defined, or the colorpicker will not display correctly. + +Options: + alpha: false + Whether or not to show the inputs for alpha. + + altAlpha: true + Change the opacity of the altField element(s) according to the alpha + setting. + + altField: '' + Change the background color of the elements specified in this element. + + altOnChange: true + If true, the altField element(s) are updated on every change, otherwise + only upon closing. + + altProperties: 'background-color' + Comma-separated list of CSS properties to set color of in the altField. + The following properties are allowed, all others are ignored. + background-color + color + border-color + outline-color + + autoOpen: false + If true, the dialog opens automatically upon page load. + + buttonColorize: false + If a buttonimage is specified, change the background color of the + image when the color is changed. + + buttonImage: 'images/ui-colorpicker.png' + Same as jQueryUI DatePicker. + + buttonImageOnly: false + Same as jQueryUI DatePicker. + + buttonText: 'Color' + Same as jQueryUI DatePicker. + + closeOnOutside: true + Close the window when clicking outside the colorpicker display. + + color: '#00FF00' + Initial color. Formats recognized are: + #rrggbb + rrggbb (same as previous, but without the #) + rgb(rrr,ggg,bbb) + rgba(rrr,ggg,bbb,a.a) + rgb(rrr%,ggg%,bbb%) + rgba(rrr%,ggg%,bbb%,aaa%) + w3c-defined color name + + duration: 'fast' + Same as jQueryUI DatePicker. + + hsv: true + Whether or not to show the inputs for HSV. + + layout: { ... } + Set the position of elements in a table layout. + You could create any layout possible with HTML tables by specifying cell + position and size of each part. + @todo document how this works. + + limit: '' + Limit the selectable colors to any of the predefined limits: + '' No limitations, allow 8bpp color for a palette of all + 16 million colors. + 'websafe' Set of 216 colors composed of 00, 33, 66, 99, cc and ff + color channel values in #rrggbb. + 'nibble' 4 bits per color, can be easily converted to #rgb format. + The palette is limited to 4096 colors. + 'binary' Allow only #00 or #ff as color channel values for primary + colors only; only 8 colors are available with this limit. + + mode: 'h' + Determines the functionality of the map and bar components. Allowed values + are; 'h', 's', 'l', 'r', 'g', 'b' or 'a', for hue, saturation, luminosity, + red, green, blue and alpha respectively. + + parts: '' + Determine which parts to display. + Use any of the preset names ('full', 'popup' or 'inline') or specify + an array of part names (i.e. ['header', 'map', 'bar', 'hex', 'inputs', + 'preview', 'swatches', 'footer']). If an empty string is given, the parts + will be automatically chosen as preset 'popup' or 'inline' depending on + the context in which the colorpicker is used. + + rgb: true, // Show RGB controls and modes + Whether or not to show the inputs for RGB. + + showAnim: 'fadeIn' + Same as jQueryUI DatePicker. + + showOn: 'focus' + Same as jQueryUI DatePicker. + + showOptions: {} + Same as jQueryUI DatePicker. + + swatches: null + 'null' to show swatches of HTML colors or provide your own object + with colornames and [r,g,b] array. + For example { 'red': [ 255, 0, 0 ], 'blue': [0, 0, 255] } + + title: 'Pick a color' + Title to display in the header. + +Events: + onClose: null + Triggered when the popup is closed. + + onSelect: null + Triggered on each change, confirmation (click on OK button) and + cancellation (click on Cancel, outside window or window close button) + respectively. + Note that onSelect may be triggered in rapid succession when dragging the + mouse accross the map or bar and may be triggered without a change in color + upon specific user interactions. + +Methods: + open + Open the dialog + + close + Close the dialog + + destroy + Destroy the widget \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/colorpicker/TODO b/public/javascripts/jqplot/examples/colorpicker/TODO new file mode 100644 index 0000000..acc10df --- /dev/null +++ b/public/javascripts/jqplot/examples/colorpicker/TODO @@ -0,0 +1,14 @@ +Make simple blog page + demo + +Post to... + http://wiki.jqueryui.com/w/page/12137750/ColorPicker + - screenshot + - link(s) + - check specs/requirements and add/fix them + +Colorwheel +Triangle/wheel +Related-colors swatching +Configurable swatch layout + container-width/height, swatch-width/height + Autoscaling (table?) \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/colorpicker/images/bar-alpha.png b/public/javascripts/jqplot/examples/colorpicker/images/bar-alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..2950daeb877f9e917f841953f29c64266b691fcc GIT binary patch literal 2195 zcwPaM2yFL>P)aJ?Ae{j(ALGd;^ML+jlf&n5{$#Vs zrZ+RiC)5X~u5V|`WI(@iGkwD0dj$?<<$Pz#OHbMvP~RmEPftGIcoSUt4TtYHY_<>Zbp9~d6&y<8@9BUQc-!C}Y{kG+WrOd(yMn_k2WdCj zytwNvgPvtQy8`$PhaXHv^#^=AU1fbFS|b~>>3V`&uU5IUNYHaoUY>oI+3aL zM_s|;rNFxqV7*{!dXI-6GOkkKFmj>8l)Vx6%4^1SqC536z}kYXtcplkJVcyZ6C7&B z4_6`L0H=zkoK2f82K5w_gDt@v%*!9mQ+P>!XifW-RKyy8?A;*T@s!zyN^cXu4_ z#!k457F;LI%i86C6`L4jD!vdaHO50$K>Er}HXMHZK)vkGHq|VAb;4FF9$Lrgn>Y3` zeK7JQ-i+Y4cxdy9Xp?77ZNPVP0!lW|<4C1Q@I@G@N6Z&EXg!S?#lXJ%$;v~n= zynK}w>nYk4Nxhq56$MyN@UBAl76 zR-Vu|9DbVM%mJ5K;)k8;(*dJs)ytXxY9~omi=qwYu+L!5%QEHVN^{-+CgONBJitNy zLQAvga?AzU=Tkg1uzFe~_(NX)tWn#c^J!l0L=kO7BAgKjh9 z@BonsXBxQ9os(&IVn*jy(xp~pzT!4s zs7>+QEgpUWaOQ~y;fc*DozsG8Wj;O62FiU(0xhF1I{UH|te~p*>>dvfcMf@1V?8|C zG-?znb8s@f4*&51jN2*8vcs}fu7a%-P2v_0znm{f^g{>dTRJvMr;&$CS9WIUlciai zfo+6k*+Qhz8HaP;wUCz&i0Om`3i7m z2b!!Wnrs@eD|@y21f!rDi2g<@VwLu#N#v0t;OeZ~WOYcU%lPEGn&p^5+^Mo(>Pbju zVZ;de`0W}?>|sRcQNm*Nj>E6#pc!z6_#v#P5y!4<29;tI9Hg;GiU_A>0F}BopDyM| z>JR}rL_?0b`?h6ySqeodW3Z02FD;~GZE!`+bk~SQP5za&-iE_(5?w}Iew+Y5ifGMrSx<%W zke4(5XQA)sA#XdX0+dh=M)|1R*Qt?>^;ky16omMHOXIqtWSLhCww4mRDx7pmTw zyD4jBN-_m2bj36!402cRNO`Px>WDgNVHY?`RH{m!$Ns0~-OL&ai1Cv73`sW|3#_ryLd|aB3yJ(yTVLK_q}! zKX+P5Qnl2P%&e#nV}T21i(^Uhk2Q_WdHIK+WqFcgl<3&bqKz~ZV}u4p{LqRtKno<+ zdDMoobh;_p2g~$B0i68gdP1g%Gzdqohb~e=;Y7%0JR!+S37Ajbvf=Q@;JZkdk)-yE z{7^?Tt942@K{~cHMRG^M0rrl|bj%kV^MK4(k}ktIj%jbaf~ zvZRe1f^Kl*hd(7Y^AHaush2%F&nhW2Wnt?406d224$h|CeJ=pn_#9xTIz&QWPZIuT zq&HxwtdPR4h&QH!qzdlIJ1ZKaFm8bLv*IzUP;Ytp=LBaSdQc8}0}^cN)qWeqtp)T0 zlr2gn2S`=xNu%-<5S>o@ZAADUB~9{n>iewoC=IuiY|1OmRw>BoX`h2HRQ72DXT#wy zz-C#zi+k8ldpf(^MjGki&>Kb0&XRj74-TeDceqT%CfWy^zZbzI5O# zt6U9wE_^_LxzfUf;jmKQI#X}edX+n-Zn*NkUaJ?d;qVQ~%h}#xYSWdkU(f~;%0$0f zqWS8J`AVwPgKndMt7M#8iA*U#z7~WNfSx!;X;*cso5AsJBtkE5dzWtFE}z6%yaa_dVrs$#JdYA!8m|3^H0w*&ekH~B|^0RX$t V%b6gctv3Jw002ovPDHLkV1n&mGJ=pF!M-AOCP@J!(+klQmE(u|Nrg9=jPdZ eb6Ybo@h~`D<0uF}a@rE8hr!d;&t;ucLK6Vi2PWG9 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/colorpicker/images/bar-pointer.png b/public/javascripts/jqplot/examples/colorpicker/images/bar-pointer.png new file mode 100644 index 0000000000000000000000000000000000000000..6e980cfa770d279c7efc37fb0bdff1deff63a357 GIT binary patch literal 198 zcwXxa@N?(olHy`uVBq!ia0vp^B0$W}!3HEbPUl(xDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MH!whjv*Ddl5{jr{W{;ka>tfgQqqILdi#3!i|3h?c2zGw z#Ol?(`M+?s#t8$Hy*xfIx*WJJS4eRme=Qg|T=*M0u-BGwpK*Z!m t%!!uM22OEoD;Zb1viDr+OKo6aX2?F7d|uo8wGz-y22WQ%mvv4FO#oNUKbZgk literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/colorpicker/images/bar.png b/public/javascripts/jqplot/examples/colorpicker/images/bar.png new file mode 100644 index 0000000000000000000000000000000000000000..80eb2bbe76b26159a17b1cc19aca8e39da447e3e GIT binary patch literal 382 zcwPa10fGLBP)}1*%UwHVKz(1$>|B5)7j`^u&Pnwz>oj`>(>aS jpPwhotNJUGfy02oX)8y=1{2rcK#dHZu6{1-oD!M<2x%(! literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/colorpicker/images/map-pointer.png b/public/javascripts/jqplot/examples/colorpicker/images/map-pointer.png new file mode 100644 index 0000000000000000000000000000000000000000..64992968bc5b4d8e96312a6f7ea541e220a17401 GIT binary patch literal 344 zcwPZm0jK_nP)BDN#OFIO+N9yZ7w#kLcMfM$9M}J!2MM zNZg`VQ%b=Fj53NMm1UV~+g44}w0VpXM;<)k?-tm$eNWR=Ez5G_WWw+mruYPL$X15MTgTV`Q;p**tsz0000jpkh)Y|MGIU9W{*txe8l=BbMlGoLU#e7d$02FDPb2&<9lsNp@c{d{Bhg$WmQ|)ans!8 z**?eB0!QoBMMB$2!l9)H)%*>!KSU?h8O`KxO)+8!&mU-v92X_$hJ&I?)8Fq*8S-=+ z?$(|A@@x(3zfYC=D=khwHrORweZ0(xE;bFTIq{gdktJs(4AX3J-MuH~b=`J--d0s} zt#Uc45^{OEmsd-F(Bg||n>YK)0=V@x}uh|=OO zyTFZPOSg)P3q(K1seq1>J{im%u2 zD<|xR2}N`CaP3yuX4xm-^VFT63)8URVC}=zIe!`}-B$!J6Pg$}mmW zzf!d_DKyO;LJ&eZ*v9!scpMw zUxyR`r{~_ybirqDFoIa`)cMRvu(D>a{A8ALafXnwZBNNd*RGRQ=@;k7Ts*p>#bsQn ze>Uz=&z{lNxm!|ghdLxd&HOd6V#f}wF9fVwcR9Vhhs|6o(F_xcC?LIaiEILk=IKbZ z$p6p6l=E*V<~)yG{Hnb=V}Z|=F}D&H{N2}D)DVsf13s=h{vyqppN!R^-Ctv8LV8B5 zn)Y;YCFt9yCGU8QX3M+JyAIL+NQdC4KPzZ;zz-rE!@H}idjl!2X;ZhAMcFeduj}FS zIJ!j<|FC#G=2?K&-vC}W{JX)I0cB)!-ZR~p__Wr}sQxONXkcws{L*_z97sPpP<}f{ zbI$v;CjD%GBt*A?Vv%ji;}HZGJyvwwW#vlHc@3$u`a$QqR_@Vk5JWImWH-DTKKNWjY?M6 z0`^*7gb7+)Vb48G&MO?k2SBcV*B)(RrnB6KvsX%;*s8Vk?bd_aB2@Moz}K%}S0edT zGkMgNbWrgt)4=MZFX3B_6#*(%851xNc<_uowKC zI`naO!&(st_qKfx2gB1`a6!aho#Z$jVjyiUwD*UjWEcCaxT1Cunc|l1nWxW^g#qs>}n2!n8@%lEAOKRav~W zqg#83KI`EBLlF%jU{Sx{gv0){?pBk|hX#?)J?GL2^N!euC2^`^F^$$iNnl^ci$!y9 z=Dc!S;32f$+&1Cw--e+N%mpi^HHr}{0i8G4K~z{?-<_TNv+J^Xq5cnI;BRLc!pv>Z zf7Qux1^=s%kBD16qw)dJevY(V;Gn+91+m{1EX;T&qR=+UyQRyy?eBg}?^q?3EGZ90 zT5C;Lk_L6nn8^b=jtUuAjKbe5i@oY2UxOW zcV}Od-o>#7FmO@8!vs^Ps;{+2LyUl~9p`ih@l5qm)~)>6iIsyEm()Q@Smw&G9r@c6 zQ-?GxQJnmJ&vVq~I9IZ0+=}+5ZG1^5+63F0igI6dj2eXs1r`f}i)Os*eVnJRTzaud zLap2_AcIebEJb;xP!T=?-OmCfpqNOUhqz+ce&ShYBMAjWq(AHx_IT;WBa|uUOFHuJ z#*3?wYeCyl6rqA!lO-p@-%nKjEf%U1EN(Svf(lltT@hNhdpxK^OS~YaieiK66;1Rk z+B60{SC$mY1*Iw-z!HWT@3qV|K?zrrBR4m#NODuVJC?xL_ZwBLUNDwkBy?>VIwaFz zO`gnoE?9N2@txM^25FL&OGVFDU%Zb!cm>W~+{WyxC}kkY6Bdfs5*`7Iay(w2bH~M_ zEC9UI!9~kB-?gMYd$2P)p8+()u>6{=8mw{;be|vKLKZgm4-J{S4F2AX0kJ1;CHUNR zdw)^nO`00)T0aPDsSJRA)J7wgpm!|)1oD~LkME0-Xn&jiw@7rqCgsrz>t|sgx4w~D8 z53qzpAB>*u(d!K<9ovxtxp{G4+tGDLgH)3JA*I}@r7Ayu6zk$?9*IeE&hb>V(s_SX z!5f2Pi-3}EV!n59=n%!lq1Snt;t856=}_-icQp^FdaN(nm)4AmoK_bAdqQjoknTSt zO@b_<$6`x??^pA_oafS*8--c&;arK0ES~G(Gb`~d97F#inbH>SPz2n>&3DApVqk6G zrSAD>&Dznn@o?YiE5rUd-8qYlHo2-dA2Gs7lL2|(kaWdE#Zn(bG}#_&s%TN`kB%7k zqsjc(^l@?!75?4H_A4{5R^NS64uiC~5hC1NVJ3uN6k0V8P@|BjjdzS7xaj&z(1h}y zZPJTBJ}caArf*~ID?)Qs*IFfQH5vt3_U0q0#Y9r$)o6Y5?Z;ZKvbh6j<)Rr~9|5>^ zQEulI9|-jo9kzG%^Dr@>ahbJIZ@>%w9BNGoy%TjO`zlS3>LX@Ke8P447>=vRFxtNR zqT6lOqFEuVycb{At)j|_aJwO|!HF-!=4CI;)3J|c{z`~K?460Fgguan3?$+& ziSN<|GW#ogS}zA93o2LWHAKFC@TIvt$u_kzeIl!iJa(byd zZ^eaO-*J&Xgr;GC`*QSbc~FP_C`0xC$n2=3zjQUt-KHnRyuGFJmp7k_3MX)t7dRUp z@h)!sc>2_|w9SN%Byu&<$eO@+yranLm8Og>FH%yN`Un3wPxz)bO> z_0|a1q?c0(z)U=#P4x2t0J$hOfA;X-iv9eM<6hj->+<4tqO zH$SSc2ewb1rNwmX^jKK=4)Xv-J=CC|%MEG~D80|l>o_M^{hsZZB82B%tQLu#ufpYn zCSc1DIT%BA4$!tat8KZ0i=!&(0NpcrzDs)JHB<6VtXXX zyVpCm_SdzU0Oo9 zD(cO6$KsDu4gdvw_=Wmhfv$>rYbj~jUp#REMBQ&bKm0&k@wRPgf^kD$AE(5ivJP|& z46WF!D%DWb#F_iP0*?xvicq4;r#1{hmU6hKG9zkaNn?e_E7YO&a@rW13}P#)D&7-4 z^w+0f{q!xbAGC&c@euy)3q%1iR>7s_AAcx2P@(GP@x}X}Z9&Wn@0DHNl{aiPb^}E; z@<%U-DtvK<7ln^Vqz1z)jfH0$!P9kn6?=2YXw)5HtnG%1CNkj5nRb2(eOu$}@I&S# z!#{`x#+nm#1VHCU{`k%y4^Vn?*8ai@5n;Jk?gh}T2y=S^s@09o=_+LC>~C{UGl(Me z3t~TRghhekq-L<3v>au8OmtTUeLvyG9j1(9|kH z&d!CK&-I<>fb$+MG>L?M;}MrRDnS6L1=9uTOgyRes&2~HK+%P<$7IcpMWzh+UhOOd z2?ed<-k=fS*YB&%8VnN9I51H+q@-Ke$rC3SMN@L>;SEw1wiEH6tDYT~fA>R?>GBT& zFjk+p%4P1{YLIzZP@`ULL`OlE*d7X~r9|mnzHcT$` z8DEn8^m;aBpB8;T628$wk3>!eWsK)Zl;tr-#6C|TRqS;Jc=lo`zoOe+=KqRal zxNgg9Z`zCLh$z{hx+4^2dUoq2%UIML1*w#nDuN?8EMdjNG9Y1j|D*gEU&{vrVXpv* zW}+&d)QmZg82XBnHooa>0D3XxsTitUVaSM5Y#(6x^d1TJ1!@WI$(=QFQ8&SP@+Zg{sg#wBpBlb zcr!8A5`hr)Wio{(%MN+(R#=3rKR8k4Jg#b)V`+8^F*P(l7vIo_2)OQ!-*#}DX$ZXz zFI66~B7D6zk3tyJ7<%hl?jtmZ%NAdqUc271yLyU@EmXojV)4i@gZ~B2FE6V1@CHPD z=&v;2=D$gm32tjJ^HanG2a#LbL~54c*0xS}=mhcb~a8{+$4Dhx4$+jRV2 z>F%LFhc1n}_{i^V;=*(4tIoYj-QMV>kcLX!dqEoBJeNZgD%HA0-GP+*EJHr$34BwQ z7n{iF7Rh`NPfvmesV>p{^cR zrRL99b_%`_aAV`F+pQNbCm|IVNv4~V{}=`KPdbRq!L}Ls8HvKeSGP3W=(4La`?N80 zOE%em=lUh)Xke=wORU|fLA_%l&cN%&TwT!jKtnn*(H=1_vXNtvu!L>=hR*?8!Jx{> zU?D6^8BHfwFtmN}q+2436pFp$SsU8s>pn?G#cdvpvIg6VP+4-q#py)hbHd_{blY z?AtFZFnlCK4`4&N2eb@FsEb@frtZ=mkM{s8-EO)E`cp~A(P|OINOKTUsgElFrbfFx zVgO%Vzg4b`l7dL5V~t4QIvak%5dB{1_78)Hy>?YJQ<}ho$7Q{@S|}F~yOg@snvE>n za?>aswl#}=p>HYB&#(A3`U?qVXGIa!QGWziDz=9c4qK?_DY#6Ix$2u^Og}FnqgRH7 zz_r>Prhlp^Q-X3qOd`AQ7BsVRyNlY?<2zu~iIxCARGi_wu>!P}VZ)=fc*Rg~#|8Ah zepjvgwpF(r%F)^LF)ZE?Pm7dz7DQU77A`0zX*nfX$h5BK%OLERm2BGg6jHoN(9r+5!Azj*_wT8!#yHxh|ogVt@Lx27SjLeCWTSYtVxy3Y(q7R7_N%i?#J44Gf?F3{Y`noAg<~-jImbCuuWZU$b(``Q9D} z7-u;h_k@bk<}1NXiCt|}JJ;`w2c_+O7 zO}&V2iuO0Qd~S0Jo=@>B`O|c}GKvF~1L34lapOpb~FnZ7-{K?b4edcK$;~|&BT`98gAbOO3wwNcP z7w&K9U=|^x#n|Z>~VfCx-K3;;WdPp&7;sZ)Cc?_ zKx$*kc$rq`6d6Bw2(G_q$sBA<_82EmRDRA*F_Bfu`26}6=B&lXGE!MB9SfXn6{y;Q zefl=b>JWYu{A$^!me>|Lq?mV8ZoSqTn_-NU7B%BYB8M>P_Ee}Pik}XD*Bsdxri)`> zaeATpOKo$77blAl`FADo^IgsQ!fRVp>JJuxJ`${h(znnKC*pJGf++J2MDPgS&rk8A ztRt5b+Eg9Pchc?zw>bn+iE@pPM3@dB8uqdU(gHnJ8#>jn?9^ zxv~fS-G7X%Rt4vC4@{h@?HJRk)!{U2FIX^b&6Uk_54SmfZ@`wSo}P~)S>biJmeuNu z+&w_goj50Ae3_~z(?y>n8HoI~%;J0?y>2n$@G`l_-qKi@cj$GN^IvJBdxnmty#+Mh zhR@sbrD`-gG}VZ8t5cuE zzxSYnsp<<3{r2=_fTSiJN=hgmn4f3~RlgzibPRZ6@q9^MwAc>G5=-P-b0%mL#6yy- z>z}8~L^SZVOyey~Y3$SXpr!CWp-}@iq9lJ%zsEUZW6qBlCFO_c_RX-7il_vtGNtmrrJ6u z_mlrL5pMc&Gn&SBG}X0kkO$#n1h9Fg|C%H20+F~Qx~jDKuiv~$lRW5FOWK4agoz~` zTane41`)Jn;!@(|36)ikorR-#$Ryh^<3WZKGe%OP@>$3{F+;$+-7w23jBzOS0&!cg z8U1`o2lQq1z3$<-U7P#(gi|ZF@DEZS7kS0}5uC)vwoxB=6(DV8-#sekp1gS`jTWqElogc6Sp0awLt^kN5fNlL|U7ZeNIdXA=sEi^R?6jkw0Ngek?0Z?f9bAVR^Y%NGLs8^~M0lmXf$^i&_ zNUM?T5qQtm43~J$5g2#y*mVa#(6jjgmw$FqG8AD`$59FF9U}t=MtHur6P}3G;KT7} z#mE+XTW8TJf!d`{NSa^&3#KTjG@^sG7b9Qs`@^dbKBQ{OMLpJ-9d;e|a}br2d~*jLy+)HE?|z>r&vSH#Bb8Mu>vgmd+tJCf-M30!STbJW=YJ5B(GBeMG;i%{w^7+H%vo zz9WgcEo@4ie4NdBA#&U(1qy4g`~uvHhQO)HCoAgRI)V0wTRGGnuMUV(iZcUVBb6_u%X%GX${PbwBT zW?HU!W+Tl)H@l9X-FW$m$CpjZ{8UC7IkpJ5-K2+rgTGo8ze5{bY!5=HDe-kDqM01& zyYm@)Nd%Bb$`jh5-rWVby=U!UYSWzXm}-7(9OIBA8GMu4mVaSVi2N}DjQH#F^0^j2 zYRh-*cR9!O-$`y_;HHuNtHl0CREpj|;}73;lq#9v$02le&TX4GeXM@c9ya| z@phIfd2Tq7xXsn3yof`>^5Lt9?G|+1{Lnlj-u_d?(`vXJ1NW_u=?^Cuo|lXF#{G4^ zs64thZYHZDp#Q9_UENE-d^DeX@qNXmu!r8frrG4=p%>(!X)Hdf-X^qfTba4Xoee1X zHu4*7B0b126`Nsi#mMG&U5L===ZPy?<}?5-zdu*o4#5){C{d(5bPXWC#pBVvgOVZA zbbQ{QFr*0Bu{Pa&8qJXlsuu}a{>(hkOiwJ88%v$i(bTF$kJ2{36CWG{R`jygu+UJ8 z`_M#nlsfd%uTeTv*(dnu0!YdEo|nApeHlxAlrb%DxwAPx9btOkHLKc1b?~noHqPF^ zi1L`>jNv<@34`hBt@>J`Y{KJ?O()p%eL(a6@kM>STVfWX!MDWaz1702)fXDkiayp= zYH|f;cshu9>Yn>ESf9{Ki$1OqFmEas7WEvU5QR?qQbDkfA%XjzbCqd`-0EBqsUP%L zBIa=>W3ZUoLp-Y9wJl7ejviKGcGcoatyvPIt;&h`#R=un$h8s#Z?T6%pSy`;m9DHX zRhrYK3@W;aProrb8_b-*HkyEueN~qM{|yfds1v(DY_Mw&vWcXfb5Uq-$ZhF8O#}<+ z)D4hQeW#{=36Qpx;m|MR8QNvj!BNX&9R1vPy6mY+GyP7DbHfdn3%~4C9N3n>59nu4 zY1Z%mV-+tz1Hy7SnJgF$J%oCZ?1k6{83^*r#_YT}E?kH8U{|Y&x}khH+OnlER3;Vw}3UAqb!!)DDq|aGie^VB7~f%buWUP2x@}tw3=NMNqWh z6Pm}sszUQWiB=g_w9g7(AnSkTclH0F62bCo?o|^`iBz zIlTUitNppHG4na`;QZEV`6A|vLr?8D>?54s0{@~FwB$*4^7Xmp3=Qv*`<8Um1;b?Q+pw)hK)P) zh$chGrUr(HZ||^(hB`svx~F`dks=&$Q^9rpK_xO~{~@3^A=5mhGPr2>|j4Hat!|G^Sf z5jrO68bu@8ace}Pqd>0TeSiu}l^*jqM{E+A&=sf2-KmErG(x*t3w>lOm<2kEJZ+ z?0<0?@Pd;V=6=BOdh819Ay%*=6An(5KU)elqC_2k`HiGuI?bOqMPD` z%rLd3Cy!c(3bY=_iR=F={oAgMwypZ^CjLCdcY}g7IDrI9t90~)45725X&nl+JiQwv zzK0+vOQt~p4|{S<+lyh%OVn9w$;(?xz+-Kd5&_xp9$Ht3vMsAmf5DyY&rOw1b^z%8 zCAVD&wKH`oEmZuXI&(2g2BA38*Yuu_rc*7RG0){=0G^d_bgf=b$tliR)YpE84SQ3i z2U6htx}}qWVuN!fw4O^CZv100P4&Ru4+vX!?3vQ{w3&>|`6qWOS$xfV6ci(vulob$ zSg2ff0pI7S763*JwysN+m1;=`wo!5ik9wp@)p?TZJ1CMY8b`b;0s%wu?L=?Dqy4F- zpVNqamoUPijfzylokJ(HR!uC%?#Ph@d$nyu^Y6&=Sb%La;uE1=%6@;J`|$8Six?d! zfHzkY^w`8-)WOejPXxJ6>Zw36)zK~lndq%aeBXobn$56BpCkxctdRz4mD-pB2R_or zeI@+TDZ2^wxMj)wl0li?`It6-sOW z!W_Pxs@@16Lz=5s^?|hlrYd?jYYPHy23OxE)`}r%UV6PBeqn>~Xg)gJ5mU0kq&z=G zR|F1v8G3M@y``@O3lWPdI|_c7({o4^Bo)5MLfzU?cG@T3y$~nyl!2t)op~EUq#Xq` zR>Ip~-~K7c#i`gbP(iX+QKM zC5VJM+R&0=8m{0OABt-~K^s3&zjZaB0C0}Udjx3yfx5|T9vBpuw#iDD2x|8V#qy}f zm6L|uP$ekTLYIn3~gsxK0KcFjHrMA;{!s@`<@bTq3u6Z~qkh}6LVrOWDL38XQe$Iu;*tiaRSNICNIVf^giW7Wx;v%Z->qL`{ zKqYLYylpzXLi8g@i3)blSJbgMY-X4JFwI*!I_iI~7hMytZ|nTj8f>qw#>97QnA36X zx}K!2K)L?}@I*9G* zO?p4k?Sp^x|FUA>;C_ojl}hQf3^;M#!&1m9e$=-7amR8rgga7+wS_dBK0$QhDY7UR zy(6{wh7BvQe(MWkDaE?i+#TEUsA?B8$0(8^?|sY1cS$urGTHX;#~ul2tP)x7DqjAS zf|Su~SReATmfd`9?(e_}I4vWRqPbk%J2-3QDYJsaaAB8u#s2yuVQ8nruY`5d}WZH2^HQdlc% z(W?|3Dtbf5Ml=o(zg)41Y4xFoZ?})Dy8hft<|K^jz9^GWu|OlMIt}aJ*KnXr?wf{%R?vMO&K03O zFFypvi#zhfa`dfONfW6m<5GxjfSneg!XiX2Me!mA{GkzE!vFDiHlHGq>-Z)KKgfZ* zndy|2f^YKaF01Zve_M_;RH?MZG_Jabhh?_;EfLcLz|3~&gx?_a%kgac!@DW%Mhp~O z%rvvZ$2*6kz2-P+4&Xs)-$FnOdi_oZb_Npks0~{ugoT#Mi7e{~Z&^&;m9M4OLh)S1 zC`AXw?whF5&_D0biGx~e1X%TP3(p%ydwuJ92E(bcSVrYqNQ&2%iJ{fv>GoC>Pq(VrrUOAV>m*XnK0$eB|oPyTvcJWVF93eZrJ zpy9W!;fnh;-|4efu@qU_uFZ}zc5t%Yp?enhwJOOcLY5sV=OwsI?WBk$h4K2{t*S-~ z@7>nrW~oAp`W3u0)0S{L#rCf0Bf;@9WI9sxNYOnwsPJ2aS6E*>YmKx91PF>&PwRe4 z0XYl^&&^{oM3VRiXt>U2#d#BXvUpf3vGXW~zrRW6wSGG90+Q4a%uDE;P}e~VkUtv< zocE$*R?XwPX9A#_s||%}MT_*KJw{D(;8hkL5nl_Xx1W`?510LYpVn z*qI|{n68m*SpKeGkGQBE#m&8^_ikAt)aywF!4<6F(a1NZ&eRJ}DOAE4YM5%um?3FO zT6*Ws*=gnxEW2gR)%h!{DbKIpX`UQ@Aj8n1w9Gpb!}zV&<5sK`)irt>HWGyj zQbu}V^gn%P7+EJGGye< z;>Mql^p^0G?&M=cbvzc-#rBErUFSn5XuCYGeToScRMH&uZ~12-uZ{V4-VcnJC|lPP zG}b-NlO#<}Rm z7fO8}{Ye}Dgd>tV{ICor8I{WyMXlAgGNRQJj~4OQij(BE*Ls%x_6#FM;%N#Ir-Rkc zGER#~@%HLa;`CHCMxXvVnBH8o+zs^D4%IlRx{^x*d4iuwecCbQ41c0IHG+o7XDyDZ zmAppvnR`D7cT&gxicn6VOL)Ee+!Hh!6Mf$dP^XO&UU7n!{M&o~SGr#*Czr_CdVKj@Wf9~+EbhxA=F31m)hDCA@@mxsdb`$Q}>VY2R=A`K`Az5Hu zmt4`KZ_?M1hCknuJcrqjCJC1-LE9|v0hH9GfR z1Ej_}W>CgngyDyPQQn(eA+36yGN zbWxy$hz9AK!@YJSEwG8HG8Hw8Wmc?}1)w}5sA}}^fdY4FXWYnl*u#{jxg`lF+2gl? zk_N-j=ymZ_r~c|hv!Nx3)6%&%i}>P1WAcww`wAvoBI+tdyFNkWYXe>69Gkec^RVEc5?h%5v+eO?;4dKZC4^A zykXs;)|2<4cx?&mEuY>N{pu};gxOcg34*<8j&I|lx4&~9L;)?_XCzSvV@*I3dQ{&# z{cnfJX!v)gO_Rvf2T-BBA>_wweh$1*SeYwQ) z(OkYzFY^EaVXz+7Vxqu|D-jl4)sV+WP_hZ*CQ|2S2&M{G7P=!|1h_46P3eI0H%}$N zetrOVuxUOlf6RNBMJiGD@Cd$HLO5PNm+a#dCMa!R8(KsfLg3F&{b58Mwx|hVtd^m^ zIGJahnl_Y>dQ*y=qoGG}?#hl^F39A%FV~$G*rNVC(X$%G#1b+N`3bfU3x~o`@ouD1 zSqM@yrwVa6$>T)l!w0|L8esm_EP#OX=7Y!pTeKzcT?8JiD01FATBb<7C+I zF$WJ%2Z zNZoTxfD{|RTRNCM=W_DKb-tx5MO_yL0$hv$O17xXm+K}Vik;HpdDj@!&NgtsfGLs- zfD)&We8 zA97Qb+qp_^ivDJ>k8oE5V2KiuRtvV|&un$qggmE}AUH_X;2Z3Rw_Q_P-Manjb@yzw zkq`Tua4prfIqKV$PT)Iz^t|feO#|}MMI4VJcHl#PVvl$y?K&SNaB(Kt7=ijGF|BwT%?yNr1JZffn6E3nl{wAVewSuFTiKC?H?jr>w#b zb^~skwRk6nAnP-WsM*B3?S_4edT8CBTcfh!<)8 zW{6@2dGQBMy8k^Eq}mQV_{nl{TUfvY+Wy2nk8h`ThgDQ&FRmF;>1b{)&^>?_N++CS zL_$3D_DTqk9Ip$bF0>)3lti4r(4LMIs*Nmyk?$7pe$)#UXk8ALg7fY>|UYZ?6%|De|6C+ullbIqERG5fD{iwotU$O_d+~z^Wu(hL><((QF<~tNoKrRG%Szg#%AKOaEM}}TgS66r+0)%vcB^;soYrvHlvu? zxR;guPKYw*&e;MQ7UeX6c+?M+0CI|Fles-NpUo&=OUnTao<0N|8Nk`M&u*#B8b>#x zEyeykIT(X+a?iKRW0kDcsLaIsS>s@4nQP+ec-1E|zx7n%?lXRuL>-F0$x4gI8HC(Y zhh7ngct4q30*$uEeO<*o>f`~XrZskY0{&1-VDG094S-f=?ycd8T`PNl07TsRt&u*n zSO1ni>`+8g{N87h#p`FPn~FW;$4Y!Bl5_ji+HH^XFaPFUA!VctwO-wqm+`FJK0a=i z*;lIjDZSxy9DJo4kle};XcMJVoZ7f25Vj{^Oov)M>Gi5I0=bw!Io|JSTO03Cu?p>g z&8J+Sq)?dwTns=Mi-=8kbfB;c-D08mFRRZfbXUK;<&%g4s9lEiSSVk`B2-cpUA$UL z{wiwdU$j2Fc-k_d-t5=C8SXo?op_}uk5xGCa~<*(6u<|NY>qa&g-_v( zGV8qMGjKy~ajL#(ygr(&DPO7rZ`f zyPC97#I`(qTNgznS-J8t_uCsKoW)$fNaj`gMzA3GMC^K{?X4ED`F7~n^zI(&e}xZE z&1eJFVe?ei1gc$fMsI$amALvP!-UK6Dh|J7;Zz?N+N-J?^3^=m{bIlocq367hPG@K z4*B`UXUm0aH-;X+bA7e5Qwg{Uwzj1UDMm~#imL;=N54c)4fjk#caB4M;1F@|v29_8J_i|w7OZHKNd^e)(T%QAQTESLS&pFLsNynpDL zKcyJ}9a(>jv2D?=npd;Cx1N$bW5;K<(inE$XjcHx8uXhGI~c#{9A8|Kv|OsYebgj~ zoja?T`}+FZ*Ovlb41-G|3q$DkOY#l>iNI$xg#UDPA=q}B({^e^HBX*>@Udu_*=9M# zbI`@}&mgzTifrhT?EQSeqj&qdT;1r!+m(w!d8(d+ymwY6!!9Rx@5=5`pG2EA9~TN$ zrZ`m$3W}{vhHgy~cxI>2d$%fS7K3@imHzzxv(YR|`d_1iKtvFRN8`oYJfB#=jWvT;;q#ecrFp*4}8kSQNWjj0JD-5NOOAZ82W@sM#WZFM?eK8pJICaq1CeOJ&OzZ7n zkWC}#^M9L^>p&-8^3K1U_kUh*$Xy9~W?hM?xS=tgCH1?Q0#wfHR1#zb^NtbQ8yC~Z z2Cc!T5wdZ|A+yK(@;m#cfd9>IxDH+n49;IV2ha8-4X=G$zacEPN}LVA=B?(=CRza7 z(Vk)Yc?Vv?Sd7EW-0020bBfQZpE-QtxMB6bC+|M6xgwl3=0Bj6f<9CH*OU6+`hS>* z{jV?YX7dg4M$d)-58nB~ko`Z9tIGoyKq&d-35jgU=(P>l@Ps)ac>kKi1~hj09JFu| z7I)OYhMAAPvRU$C*Qkp8+XVXDk^T7XF+=fv1Eq?f$lqV?RuQfHDFUWkDmuo&N7{}5 zjG-I02t2*WzY@@T%WUN2KSU!T+gYCV!3hC}Xx1R1$M51+>F|ijrdOb;htzC!8Xg8N z+`r2?gXlp;^mupGBqVks5DmY}$!1YrXtxO^H`YmF9V_Q%c>q`gG*kep_kC*PZ(%)o z$x_E_lqQIZMaEgjEO3io;7j_0e88xTNwYu>Q;3bH>kP8 z<$X;QJl^|0Q7x76ignD^KtJ9!0?Y=Xk5x^2h0QH!?~<5GskAPKN70dp1=fb21>-s- zaJgVZP2gL`F-zclR9nTyU_p+Q>6?_^j-1mwpQKc%OXN7lXn9x&fJaz4lCfZR?4dt+ zSmd`(2g@DhiKdGXk!y;7v$$5KVH5+Nh@J`}oeROwyDKH|#nIc84>ukL|NUjPZI>%s zB8lpbs&+Bh(0FhoeB^I4SR#Ad!=4>>W?}6cULkWm6#t;_&UAgxN3d&vbYbl5U>9lI zjzNRM**V*Zhk-xf&_LsOhKyio;FFGJDB~#+81i`kF`sBQ&FatK?>Ss9>2R|nN{*zY zg$+PVoy_^>%Z|=BA(#hvHPHQl*d%1TBd(*Gq*}J5@IBsQtYu?w+l{0{;cT~1d~sXv zG&1t*L+SYhI3EmfpX#v)8T?d)yqV#P2T7H4g%)K>u=PQ0Vd`?mD#bq$1N|6RM_GHV zlVe~*6(x?*1p7G__VgiyNc`CLDs=NkA0(<{rQo-aZAF8%PvFiM|3}ta#zomh>%%h) zjdV#$cPO1QL#GT#cT0nmbfZY40s;a_;13*xzXFVledg=C)NfS>N=1VM6$e0$R$48I7jRY?4^5i(SFm9R%r6jv zFM6n#r8Swm8qXvv)>7<9v>G6iQaK?*;7z1sBqD~oSfjdxqNA;NV%bBBCk;b4U9dNK zm+IlRRjkVnkbQN~K`o9Yk*S~`PIqO^1S^nKiYZ5l=%^MpJcEmwahW75V(^qbqiJN_ zg!#J365~QlfL30@X6R#tHLT>NvF$!TI&Q$QPEoKVFsCCkIJejx58lWHF2L$nyiKB+ zovP(=So7)?*~LfUXvIT(r5DR)U49RX6GWrgwwxaGA$;{XIW{mT{lzp#7%mCRd_MLQ zMT8OF!nCXyJrPJ!Y$~WelsZcxV z)b%+{ismXTB&s)L_Ez#B+%}hax)B_kgrYF%D7(IaQHt+b5$ErJCd3k6A`HI`^(B)f z4uhEB+m{irxeYJgei!MoS&OD^JP(v}4Z8^;P$NTWAwxWTq+^_#w6m+psa zNxg%hy`=41_texVMlwqCuvU~YpFhAA4%o#IIyEyVKk4)SoZ8Iz07*MZKXxQl5R92I zFN=bQrhqXfBVaYz=n7hER|S{0pwu{?bte=v9DCpl1n@>)Ncia=u~io&q*c zE{^S^ayu1bMxdi3(rXgfjE-n+0q|p&7-Gu!l}cm$(0I;BW^tg|0?BCPeollU6>6*c zL~N}K!IHb~D4k>Ibz|}UV2O7vi?CsI&mNX8LfPzeR0#}t<43wwr$78c`XJR*b6^I6 z0{O^%zHeAluUW#XFEHjAx+pE8HQ9{dYW~_ur^#10=E5L#^QH}3>rMdHimjpO1K32V zEoZk?Uy`OaEuZ;z9^>rbZZO+Iq;-|>gvvOv;1+O3B3fV0qI=8Nxv6uW;K9;iezR(D zHxvrxv`MN_!LHqV_!ld66#8_9Rl1- ze9BwwJhrNFJwIfKYbYLP=Q9DW4oW5nac4!R`dT>j0B^DA{Kp3s_sRV+Sm!5<^SnsB zJYYPArv%QZv|yAKU|pw&!`DDjT71fk28$yQ`-wd1aJ^}tNc=mrg&4JUO3(Ur-DTZ| zT#;WW_H79ECg_|g((4&U01e!dCd74lGi0Gyp6C3kR}S308|?cshu9#L24klHaC9fN z&34QG_@nyF87c@J@lQ1Z8i5dVpeq7ez#=RYpb?zv2~h9@2xGXK;{lwZBVo1{Vn@4> zmTEvh>OgH3APa;j5!s8ewcsB`{<;egb1rlldIAS2YmNlrn5+V9D$G|G1>MCu?z|1M zfP)~WpM6Cml8d?#>U)TWN&SmANU%wA9sS%Y67K-5T?W$f0d#QW=PWvm{#@$6h)c5{ zy@xH{1L#@@ZoCaAKpg(|Q1xKjsuy5%#PtDUfsoCc>U8o5cgOK5Fz*!Tp8J>LBYv@( z^_K3xt9FJ;0dg`Vfyd0SMdOgKL6?xgFfl4*J5F=Nc`$$;HUhA&HYiJxC4ubXV{w|x zQz5?U=-7*sSFlc#h=hl}7M{ACDK1JPLyKD;#Azn`Y47kxKl zLail%56?{zLjOHqy^pm+J`dV9i4YXEZs}d8J#BylkQNaW>`&tyi9y?zXC}|$?m5*f z&|RQXuXBjgLTNE}exbBG+@)9QTs{c15v3A{_grh z{8Mp@>mgNK>;Kd_=Gd@+89scqt6xt6Ha324Rq0vdqt~BY}&oKNf{BWIsUCRSWJkI#rqV zre2(vei&Vi`yS#+nP|meND0FO)F9Q7_CX)cl=5=--d*Z1)Z_2|2f`TJiWlu%P;*R# z5gCA$?lsJ!+Mm>;ea`*Y>C^sVf^MHkuY_Pm*gpceI}2!Ek{w>{r+rwGw2D4E4?EDn z6mY{rX3-YwLJYb&jNbLRO+C|6)Zxp-aW&8d%KLGvYX#;PJi7~w@yA(>ETEh|c;$8c z9jW~=zyf2WSEMkTdeFO`FC*WppS_f{ByGvdG|a5$LV^G@2V~by2)!kd38DexoU=7y z3|6#vt;d2Ba*Ldy3J^*598ee}2XJBgH&YC7D8a4eN09ZS>L8>BZU2s|9d~Dst6f$0 zb{Ak18ucqAjT1GBE~7CEleUBGBK5C44=<==x(eAjj4=g>HG*lq3Cd9HgJcN42OEu> zSzi@Vq_}gv^9;Lz5U70#=107hf~TXjg90=2LiSChdXtxN?NJdpbYhL{TdkZPf$Hrv zZ4qSVE%>sQm0O}uB)>|4YXvkxvk!=C-EWsfg_6nHmTP}6kuqJar3G^Mb3jdFY^$E6 zQ%@CuLdTjXz0)LGsC@hLe%xy5Fn}YF?TH?87?Cu!pN>17?oKgSdv;bfEtSak*Mb|R5tb}s^4%*!M^0?52rIU9)QG!7XsLfhiKJY?%Rw*=%D1i zon(wiZmAdQeZ2r12As=AqTc|K&=&m#yqwb!M0EI`efVBw^S{zfd^YqDcSjWuc1iU; z*vo23`RuY$Ixt-KCbm^F=Cfd zECF2t+32_18LPQ43V3a1r_7gETU4AoM1#bRaP4_3SY-reh>=O!-~d(=@wq>^1y?v{ zG)@{ETf;#M|L`6o2lb3bNG|aGcDupTr0J6hWM5W(9PQ+71m!yY+aOd zg9tE|$e}chI0U;l*f&`k_Vk42@*9!rmw{!P%OG&~Jw);?`%x0OWzq(=W>{tF=Cv|t zT!b9;dc)cXG#ZHDQ?qyy-cgw<&fIy&NI@lrvcpL@#2)M(>RbAeu25?bnU~zK8+%#v z@2LKg@F{z&$>Tb*ACmQg@l{Qb46Ge}gHU5Ego7a3{^-vSZ%5;?c2d(rO_0CTq8)|{ z_$dMW43L9v3nakP@aW094mui_-4J2Ff%}0|^m9f$^hTr&l(>_?RgK(^jag);#Q7iB zenZ5sCl;4B+k>81w;CU#<>^8E#p61{t=GNYNAbX&)SfU?EJUjqK=o;q%+Q=nRf(2P zH?0?jn?uWE*^ICd5*W+b2gWHM)Wr!V$Ko%YR~izKSr%I6l_e=deVQR5#GrDygSigQ z-^KE;d3bVz4BO9D)BS% zjYH`GW#huD;Tv>MFS6zC$W969`w!6Gw9tR;OEi*17>i>5GcRkL|06DW*+!HGbojkf zNA{|ipY~2T*~K()(`XEJ#gd9Zn%RyUqRkRRNGhd`uRZ0jKsrUMCx2Eih zGAynZ&BgdF`g(@1t`$#jQ$_$LvOscYLtp$)kR976H!tu^=RTKHX4GsfI4|8Gn+Psa zU`5=6Ber1|Y8Y|;izPk-fb9*z(s+Bwd{axKelSw8=?9ZDBIRz>U&zzwM-T^}--DfZ z;7umR$1lp0#9e)9c`AU$L2;bHTle4Gy^E*x{vyd5X(8yG z6q_ze@9eem-Sji+YSBr{l+FK6Uj@_XVqc2|e`(JA(y+uQuNQBl&sg6!!q)=12mhCA zU6f=z!MU(SH`QLY+r-cTcu1Nd77~9?0vo$GRIC7V)(`jxFw15y8g&~L$F`;fmf4aY`@ z4QN~8A{GsRIVfAL|mW+Lk1rWbBhA`@7iBXfWlWj`JhE2iX2$X~6TYNE2*CqdQPS78#*!(_(^f zA?)&6^!O|s*QfI1MMEYXlhRh6FoLeA+oU)lSO~<+lsQnkfMgUFP|Nc%l@Ku(AvzD( zo@BYi<+TlH5oSVw{Bc%_<~e1#4_iHfpw@nG7M_3D4UnLP1YW7Rj2SfwZPbu;(vtea zc1wkz0ZS4hVpcULM-YJO+tletkt$mT>EH%cXbr+{vXt}K@)eMV z#r$Bb@-$`tNrEF613P9E6$tiXZmVV{65X3Gki=pB6i;%AIpLRBlkV6TxI3&*54Lgw znuk-|BZBx-#&J0+oN$EU?vVRXa?Qr9sqrP4$pC)?9^9Q2JkqaxCqaQJ702rLzd^`C zX=e)iBDc_2ea58iOT<>L{~L)DRHUP6NGg`A@Sw}!GCUkAvRPhq`HW;bf~WKKm|-8G zN(>7WWhiG;+UJuxKx&PrWWWD!Q30mtiYS69k{HHo>5P<=p-)@#A~nAWO$eSm($XmNL< z36WvG?gtafzN+2LA zLF(1vr!NY~&7xmJ02?u8cBuM{FNdEuy6#yar^slAC)f_7$K*_hodG=jaE--mgqEKq z0@Bp`^bngjM$h=T#x$b*VvHp=-v2+S^d)%W_dm;tjnO9gLwhA@yIHpKpZ}Oh{|z2o zMT;Wo3ZK0eUZwsg%H_U%o|*26*8o{Sd#b~sks0B(7w~m_3AEAZ`7MVq2TzjLv8lWD z|1=#Mff`%zRG2}aR1UxwI|gd|6qET%H9Xmjy}MMIqd6Q@H@&AiPY*DxG)b zjf+{XVNE!2aITZZ1(f~@7~37I_5C=t zg6=5{Rgbfk1~xyOpX_p@y#!?_ZH`Xb^HTd|ft;ZqK<8_bl-SEZV9BP{np4QBrCP`I z`nH)FiF1hTSM23lCH}%)#aNDp9*#b!0qX|4o+ONUfZU5MVP4c{a zaaH!nOz+d$jF7@37)f9eC?dk}^%Q<=v$MkvcOM7A+si(`O^zqwfQ{5VLL}{t$jx~j z5>f4MHf>8M^c@__j+S5tXgf-TxJW014FX>wlQEWl_nONI(>FW)x^>#E1ww;{90WPA zmz$B6MOu|tjqIO2Y#C%!4nN&H?U+2(LO6=IBz%2SvSFYxvzO@8a?;3V${y|xCVbsv zBnwwUp(}`Iz_jH^@XRFaw0W}4%H`=B)qhu2>+fVTKp3W39(Xa-{8u+6?#KdMdHOK* z5k-U?zOI6P!*@KlCBkYGm*GDz(Sgh|6@r}ce=f`J2K#iOaRDzbTJhromfjCsK6P=H zr%N{OC9yE`IiJ!@^*-cLFLOZH%V-bp8b_yUdkyZ-;*s^h7JN@aw`e+Z-|!+!OP_x6 zBuMI@w-j*D`~SOGJXRuUF9jkOt`OME`)&17i(gRIuf>y{Y;J@{S{~I{3xXuK?u|{C zOf%Wh?ru(Q4_%acE_GWoSNAt>`=?Gz%gtwOv|)Yf|Ga2i?25~Eb^e^TU+&Iqw5{G` zZq6*lqs`-)#_B7@j?$h|WyqD+DC#TIww*&Y0x%~0{Lo$EMiYXavu^iO5$(t415SV)S zz5Rlw<3zv0_|}aOC)v6iqi)1BWz1I){7`Sv)=?i^W!!fnnOMGjFQy|=AK$(iYQ%GR z@7pJ~01FJ-|Ga*CL$`Dm1$4fIl$|#!)}I?Io(^qZoJ%O^2-U~nAKSRg* z-jd6IKoX09#nPz_dJWFX1*!;|=}X1tM3gx}E?N|ZUzrm`+{r&ys(bPe$U4(lFTw>^_^ce{hU%cyqxxlB5D*oZznn>tKr!nZ!XGrJDVG}-*Ot~q6O zPFJ69EP;MNLGo}fsW!_eoA3m8@^^C3|GGL&$J8?EV%x~FV!wGut9#Zsl4runzQWH)`s2uOagac zO_b)us$jywwB+&gN!OhV<-D^F?AW-D?1O`kZ1QWF*6G9cPU%txGN0@1pogDYliGuy zm_BB|Vr4ic*4b6Aq53=r^#|*(s!&?eS8`Pta5z;VvqF<^3egK{LN)sx75gq zF5jmBi=Go>K7##oh7^1=sk1VHiY~T)f3H<{+0z?P1=}CST8@R=oWdeMfDdS9Hs7j1 zF>Ug1@Cv`y`Z%;VBrrd`TTJPq!2BTn&((|;^U{NfwIU#c>Z3z*?4Ds!8TqyJf(iGC zb_`oXhEr_$-QOJ_Cy|s*U%l2-C(^0;i6&SqcfI51&(`eRFbmw(?07V4Ijvk zF>%@YXUppm7m{{+ss5buZ@hdX3uY1U4e-Gw>Tlk%NDzx-qj`Zx1U5@&4F~W3;79R% zc2r?!4^viFX$vTq<8&zj{-=N!vI(8?tyLIx@nphQdY066 zzd8Y?pR(YfJq56_&fb}x;Mi%VMs&0x)f*J7IR|_fIP=p@#nBY47Rsixeqr*@ogjVK z*6O`{=M^9Ev(UfGBxq#a-Nt+X0ijZoHyQ#7VUm@z6DwR`46n91N+^tB*X+Ka@BC{G zm^o(dgK>sd8~Hyw>26Ur`p|@c>tnwHF;b(yJG=l{Vy|Nr@H_nw`+XLG41i${8jupgoz6rt7Vr zniKXwvp4!4gSBF-S$zA;JbJ9>$|aG4Z9e*azx%q~zU&$u8dXjz8oNwuE>MZ~lO86| z=612Fn}6xrzR18Sq75mSXjEmyC0{hTK8_EHDTu(H{c)@oA?~E?p+0vth+xj}d%Ipz zjFX`tsu;B7^YYhV@-z)k&E1uPlyr&FT&z}30Y2x4Oae;qynbF`?54VMD@hJv7Aie6 zX(FMh1T|Yygl0*@sBMHRYOv={YylnG7^FmB|F1{!X0

3ic;mKBsU3^^q~H@gBF& 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 k12|Bt+U6kg>PvtD0M + + + jqcp + + + + + + + + + + + + +

+ + Color: +
+
Text
+
+ +
+ + Inline:
+ +
+ + Activated by buttons: +
+
+
+ + diff --git a/public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.css b/public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.css new file mode 100644 index 0000000..4e61a52 --- /dev/null +++ b/public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.css @@ -0,0 +1,129 @@ +.ui-colorpicker { + display: inline-block; + width: auto; +} + +.ui-colorpicker-inline { + position: static; +} + +.ui-colorpicker .ui-colorpicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-colorpicker .ui-colorpicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-colorpicker .ui-colorpicker-buttonpane button.ui-colorpicker-current { float:left; } + +.ui-colorpicker table { + font-size: 100%; /* Reset browser table font-size */ + margin: 0; +} + +.ui-colorpicker table td { + vertical-align: top; +} + +.ui-colorpicker-padding-left { + padding-left: 10px; +} +.ui-colorpicker-padding-top { + padding-top: 10px; +} + +.ui-colorpicker-border { + border: 1px inset; + display: inline-block; +} + +/* Bar & map */ +#ui-colorpicker-map > *, +#ui-colorpicker-bar > * { + position: absolute; + cursor: crosshair; +} + +#ui-colorpicker-map-pointer, +#ui-colorpicker-bar-pointer { + position: absolute; +} +/* Map */ +#ui-colorpicker-map, +#ui-colorpicker-map > * { + display: block; + width: 256px; + height: 256px; + overflow: hidden; +} + +#ui-colorpicker-map-layer-1, +#ui-colorpicker-map-layer-2 { background: url(images/map.png) no-repeat; } +#ui-colorpicker-map-layer-alpha { background: url(images/map-opacity.png); } +#ui-colorpicker-map-pointer { display: inline-block; width: 15px; height: 15px; background: url(images/map-pointer.png) no-repeat; } + + +/* Bar */ +#ui-colorpicker-bar, +#ui-colorpicker-bar > * { + display: block; + width: 20px; + height: 256px; + overflow: hidden; + background-repeat: repeat-x; +} + +#ui-colorpicker-bar-layer-1, +#ui-colorpicker-bar-layer-2, +#ui-colorpicker-bar-layer-3, +#ui-colorpicker-bar-layer-4 { background: url(images/bar.png) repeat-x; } +#ui-colorpicker-bar-layer-alpha { background: url(images/bar-opacity.png); } +#ui-colorpicker-bar-layer-alphabar { background: url(images/bar-alpha.png); } +#ui-colorpicker-bar-pointer { display: inline-block; width: 20px; height: 7px; background: url(images/bar-pointer.png) no-repeat; } + +/* Preview */ +#ui-colorpicker-preview { + text-align: center; +} + +#ui-colorpicker-preview-initial { + cursor: pointer; +} + +#ui-colorpicker-preview-initial, +#ui-colorpicker-preview-current { + width: 50px; + height: 20px; + display: inline-block; +} + +#ui-colorpicker-preview-initial-alpha, +#ui-colorpicker-preview-current-alpha { + width: 50px; + height: 20px; + display: inline-block; + background: url(images/preview-opacity.png) repeat; +} + +/* Inputs */ +#ui-colorpicker-inputs label { + width: 1.5em; + display: inline-block; +} + +/* Hex */ +#ui-colorpicker-hex { + text-align: center; +} + +/* Swatches */ +#ui-colorpicker-swatches { + width: 84px; + height: 256px; + overflow: auto; + background-color: #f8f8f8; +} + +.ui-colorpicker-swatch { + cursor: pointer; + float: left; + width: 11px; + height: 11px; + border-right: 1px solid black; + border-bottom: 1px solid black; +} diff --git a/public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.js b/public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.js new file mode 100644 index 0000000..6ad9a56 --- /dev/null +++ b/public/javascripts/jqplot/examples/colorpicker/jquery.colorpicker.js @@ -0,0 +1,1654 @@ +/*jslint devel: true, bitwise: true, regexp: true, browser: true, confusion: true, unparam: true, eqeq: true, white: true, nomen: true, plusplus: true, maxerr: 50, indent: 4 */ +/*globals jQuery */ + +/* + * ColorPicker v0.6 + * + * Copyright (c) 2011 Martijn W. van der Lee + * Licensed under the MIT. + * + * Full-featured colorpicker for jQueryUI with full theming support. + * Most images from jPicker by Christopher T. Tillman. + * Sourcecode created from scratch by Martijn W. van der Lee. + * + * @todo Custom buttons ->none" -> special "none" state? + * @todo Undo/redo memory? + * @todo Small size variant (128x128) + * @todo Distance between rgb/hsv/a options + * @todo Force hex correction (limit and padding) upon done + * @todo if limit, correct initial color upon open + * @todo Shared swatches; cookies/session/global + * @todo Language files: Done/Color/Pick a color/H/S/V/R/G/B/A/color swatches + * @todo isRTL? What to RTL, besides button? + * @todo Implement 'disabled' option + * @todo Include header/footer in layout? + * @todo Split inputs into rgb/hsv/a parts + * @todo Modal popup mode + */ + +(function ($) { + "use strict"; + + var _container_popup = '', + + _container_inline = '
', + + _parts_lists = { + 'full': ['header', 'map', 'bar', 'hex', 'inputs', 'preview', 'swatches', 'footer'], + 'popup': ['map', 'bar', 'hex', 'inputs', 'preview', 'footer'], + 'inline': ['map', 'bar', 'hex', 'inputs', 'preview'] + }, + + _colors = { + 'Black': [0x00, 0x00, 0x00], + 'DimGray': [0x69, 0x69, 0x69], + 'Gray': [0x80, 0x80, 0x80], + 'DarkGray': [0xA9, 0xA9, 0xA9], + 'Silver': [0xC0, 0xC0, 0xC0], + 'LightGrey': [0xD3, 0xD3, 0xD3], + 'Gainsboro': [0xDC, 0xDC, 0xDC], + 'WhiteSmoke': [0xF5, 0xF5, 0xF5], + 'White': [0xFF, 0xFF, 0xFF], + 'RosyBrown': [0xBC, 0x8F, 0x8F], + 'IndianRed': [0xCD, 0x5C, 0x5C], + 'Brown': [0xA5, 0x2A, 0x2A], + 'FireBrick': [0xB2, 0x22, 0x22], + 'LightCoral': [0xF0, 0x80, 0x80], + 'Maroon': [0x80, 0x00, 0x00], + 'DarkRed': [0x8B, 0x00, 0x00], + 'Red': [0xFF, 0x00, 0x00], + 'Snow': [0xFF, 0xFA, 0xFA], + 'Salmon': [0xFA, 0x80, 0x72], + 'MistyRose': [0xFF, 0xE4, 0xE1], + 'Tomato': [0xFF, 0x63, 0x47], + 'DarkSalmon': [0xE9, 0x96, 0x7A], + 'OrangeRed': [0xFF, 0x45, 0x00], + 'Coral': [0xFF, 0x7F, 0x50], + 'LightSalmon': [0xFF, 0xA0, 0x7A], + 'Sienna': [0xA0, 0x52, 0x2D], + 'Seashell': [0xFF, 0xF5, 0xEE], + 'Chocolate': [0xD2, 0x69, 0x1E], + 'SaddleBrown': [0x8B, 0x45, 0x13], + 'SandyBrown': [0xF4, 0xA4, 0x60], + 'PeachPuff': [0xFF, 0xDA, 0xB9], + 'Peru': [0xCD, 0x85, 0x3F], + 'Linen': [0xFA, 0xF0, 0xE6], + 'DarkOrange': [0xFF, 0x8C, 0x00], + 'Bisque': [0xFF, 0xE4, 0xC4], + 'BurlyWood': [0xDE, 0xB8, 0x87], + 'Tan': [0xD2, 0xB4, 0x8C], + 'AntiqueWhite': [0xFA, 0xEB, 0xD7], + 'NavajoWhite': [0xFF, 0xDE, 0xAD], + 'BlanchedAlmond': [0xFF, 0xEB, 0xCD], + 'PapayaWhip': [0xFF, 0xEF, 0xD5], + 'Orange': [0xFF, 0xA5, 0x00], + 'Moccasin': [0xFF, 0xE4, 0xB5], + 'Wheat': [0xF5, 0xDE, 0xB3], + 'OldLace': [0xFD, 0xF5, 0xE6], + 'FloralWhite': [0xFF, 0xFA, 0xF0], + 'Goldenrod': [0xDA, 0xA5, 0x20], + 'DarkGoldenrod': [0xB8, 0x86, 0x0B], + 'Cornsilk': [0xFF, 0xF8, 0xDC], + 'Gold': [0xFF, 0xD7, 0x00], + 'PaleGoldenrod': [0xEE, 0xE8, 0xAA], + 'Khaki': [0xF0, 0xE6, 0x8C], + 'LemonChiffon': [0xFF, 0xFA, 0xCD], + 'DarkKhaki': [0xBD, 0xB7, 0x6B], + 'Beige': [0xF5, 0xF5, 0xDC], + 'LightGoldenrodYellow': [0xFA, 0xFA, 0xD2], + 'Olive': [0x80, 0x80, 0x00], + 'Yellow': [0xFF, 0xFF, 0x00], + 'LightYellow': [0xFF, 0xFF, 0xE0], + 'Ivory': [0xFF, 0xFF, 0xF0], + 'OliveDrab': [0x6B, 0x8E, 0x23], + 'YellowGreen': [0x9A, 0xCD, 0x32], + 'DarkOliveGreen': [0x55, 0x6B, 0x2F], + 'GreenYellow': [0xAD, 0xFF, 0x2F], + 'LawnGreen': [0x7C, 0xFC, 0x00], + 'Chartreuse': [0x7F, 0xFF, 0x00], + 'DarkSeaGreen': [0x8F, 0xBC, 0x8F], + 'ForestGreen': [0x22, 0x8B, 0x22], + 'LimeGreen': [0x32, 0xCD, 0x32], + 'LightGreen': [0x90, 0xEE, 0x90], + 'PaleGreen': [0x98, 0xFB, 0x98], + 'DarkGreen': [0x00, 0x64, 0x00], + 'Green': [0x00, 0x80, 0x00], + 'Lime': [0x00, 0xFF, 0x00], + 'Honeydew': [0xF0, 0xFF, 0xF0], + 'MediumSeaGreen': [0x3C, 0xB3, 0x71], + 'SeaGreen': [0x2E, 0x8B, 0x57], + 'SpringGreen': [0x00, 0xFF, 0x7F], + 'MintCream': [0xF5, 0xFF, 0xFA], + 'MediumSpringGreen': [0x00, 0xFA, 0x9A], + 'MediumAquamarine': [0x66, 0xCD, 0xAA], + 'Aquamarine': [0x7F, 0xFF, 0xD4], + 'Turquoise': [0x40, 0xE0, 0xD0], + 'LightSeaGreen': [0x20, 0xB2, 0xAA], + 'MediumTurquoise': [0x48, 0xD1, 0xCC], + 'DarkSlateGray': [0x2F, 0x4F, 0x4F], + 'PaleTurquoise': [0xAF, 0xEE, 0xEE], + 'Teal': [0x00, 0x80, 0x80], + 'DarkCyan': [0x00, 0x8B, 0x8B], + 'DarkTurquoise': [0x00, 0xCE, 0xD1], + 'Aqua': [0x00, 0xFF, 0xFF], + 'Cyan': [0x00, 0xFF, 0xFF], + 'LightCyan': [0xE0, 0xFF, 0xFF], + 'Azure': [0xF0, 0xFF, 0xFF], + 'CadetBlue': [0x5F, 0x9E, 0xA0], + 'PowderBlue': [0xB0, 0xE0, 0xE6], + 'LightBlue': [0xAD, 0xD8, 0xE6], + 'DeepSkyBlue': [0x00, 0xBF, 0xFF], + 'SkyBlue': [0x87, 0xCE, 0xEB], + 'LightSkyBlue': [0x87, 0xCE, 0xFA], + 'SteelBlue': [0x46, 0x82, 0xB4], + 'AliceBlue': [0xF0, 0xF8, 0xFF], + 'DodgerBlue': [0x1E, 0x90, 0xFF], + 'SlateGray': [0x70, 0x80, 0x90], + 'LightSlateGray': [0x77, 0x88, 0x99], + 'LightSteelBlue': [0xB0, 0xC4, 0xDE], + 'CornflowerBlue': [0x64, 0x95, 0xED], + 'RoyalBlue': [0x41, 0x69, 0xE1], + 'MidnightBlue': [0x19, 0x19, 0x70], + 'Lavender': [0xE6, 0xE6, 0xFA], + 'Navy': [0x00, 0x00, 0x80], + 'DarkBlue': [0x00, 0x00, 0x8B], + 'MediumBlue': [0x00, 0x00, 0xCD], + 'Blue': [0x00, 0x00, 0xFF], + 'GhostWhite': [0xF8, 0xF8, 0xFF], + 'DarkSlateBlue': [0x48, 0x3D, 0x8B], + 'SlateBlue': [0x6A, 0x5A, 0xCD], + 'MediumSlateBlue': [0x7B, 0x68, 0xEE], + 'MediumPurple': [0x93, 0x70, 0xDB], + 'BlueViolet': [0x8A, 0x2B, 0xE2], + 'Indigo': [0x4B, 0x00, 0x82], + 'DarkOrchid': [0x99, 0x32, 0xCC], + 'DarkViolet': [0x94, 0x00, 0xD3], + 'MediumOrchid': [0xBA, 0x55, 0xD3], + 'Thistle': [0xD8, 0xBF, 0xD8], + 'Plum': [0xDD, 0xA0, 0xDD], + 'Violet': [0xEE, 0x82, 0xEE], + 'Purple': [0x80, 0x00, 0x80], + 'DarkMagenta': [0x8B, 0x00, 0x8B], + 'Magenta': [0xFF, 0x00, 0xFF], + 'Fuchsia': [0xFF, 0x00, 0xFF], + 'Orchid': [0xDA, 0x70, 0xD6], + 'MediumVioletRed': [0xC7, 0x15, 0x85], + 'DeepPink': [0xFF, 0x14, 0x93], + 'HotPink': [0xFF, 0x69, 0xB4], + 'PaleVioletRed': [0xDB, 0x70, 0x93], + 'LavenderBlush': [0xFF, 0xF0, 0xF5], + 'Crimson': [0xDC, 0x14, 0x3C], + 'Pink': [0xFF, 0xC0, 0xCB], + 'LightPink': [0xFF, 0xB6, 0xC1] + }; + + $.widget("vanderlee.colorpicker", { + options: { + alpha: false, // Show alpha controls and mode + altAlpha: true, // change opacity of altField as well? + altField: '', // selector for DOM elements which change background color on change. + altOnChange: true, // true to update on each change, false to update only on close. + altProperties: 'background-color', // comma separated list of any of 'background-color', 'color', 'border-color', 'outline-color' + autoOpen: false, // Open dialog automatically upon creation + buttonColorize: false, + buttonImage: 'images/ui-colorpicker.png', + buttonImageOnly: false, + buttonText: 'Color', // Text on the button and/or title of button image. + closeOnOutside: true, // Close the dialog when clicking outside the dialog (not for inline) + color: '#00FF00', // Initial color (for inline only) + duration: 'fast', + hsv: true, // Show HSV controls and modes + layout: { + map: [0, 0, 1, 3], // Left, Top, Width, Height (in table cells). + bar: [1, 0, 1, 3], + preview: [2, 0, 1, 1], + inputs: [2, 1, 1, 1], + hex: [2, 2, 1, 1], + swatches: [3, 0, 1, 3] + }, + limit: '', // Limit color "resolution": '', 'websafe', 'nibble', 'binary' + mode: 'h', // Initial editing mode, h, s, v, r, g, b or a + parts: '', + rgb: true, // Show RGB controls and modes + showAnim: 'fadeIn', + showOn: 'focus', // 'focus', 'button', 'both' + showOptions: {}, + swatches: null, + title: 'Pick a color', + + onClose: null, + onSelect: null + }, + + _create: function () { + var self = this; + + self.opened = false; + self.generated = false; + self.inline = false; + self.changed = false; + + self.dialog = null; + self.button = null; + self.image = null; + + self.mode = self.options.mode; + + if (self.options.swatches === null) { + self.options.swatches = _colors; + } + + if (this.element[0].nodeName.toLowerCase() === 'input') { + if (self.element.val()) { + self.options.color = self.element.val(); + } + self._loadColor(); + + $('body').append(_container_popup); + self.dialog = $('.ui-colorpicker:last'); + + // Click outside/inside + $(document).mousedown(function (event) { + if (!self.opened || event.target === self.element[0]) { + return; + } + + // Check if clicked on any part of dialog + if ($(event.target).parents('.ui-colorpicker').length > 0) { + self.element.blur(); // inside window! + return; + } + + // Check if clicked on button + var p, + parents = $(event.target).parents(); + for (p in parents) { + if (self.button !== null && parents[p] === self.button[0]) { + return; + } + } + + // no closeOnOutside + if (!self.options.closeOnOutside) { + return; + } + + self.close(); + }); + + if (self.options.showOn === 'focus' || self.options.showOn === 'both') { + self.element.focus(function () { + self.open(); + }); + } + if (self.options.showOn === 'button' || self.options.showOn === 'both') { + if (self.options.buttonImage !== '') { + self.image = $('').attr({ + 'src': self.options.buttonImage, + 'alt': self.options.buttonText, + 'title': self.options.buttonText + }); + + if (self.options.buttonColorize) { + self.image.css('background-color', self.color.toCSS()); + } + } + + if (self.options.buttonImageOnly && self.image) { + self.button = self.image; + } else { + self.button = $('').html(self.image || self.options.buttonText).button(); + self.image = self.image ? $('img', self.button).first() : null; + } + self.button.insertAfter(self.element).click(function () { + self[self.opened ? 'close' : 'open'](); + }); + } + + if (self.options.autoOpen) { + self.open(); + } + + self.element.keydown(function (event) { + if (event.keyCode === 9) { + self.close(); + } + }); + + self.element.keyup(function (event) { + var rgb = self._parseHex(self.element.val()); + if (rgb) { + self.color = (rgb === false ? new self.Color() : new self.Color(rgb[0], rgb[1], rgb[2])); + self._change(); + } + }); + } else { + self.inline = true; + + $(this.element).html(_container_inline); + self.dialog = $('.ui-colorpicker', this.element); + + self._generate(); + + self.opened = true; + } + + return this; + }, + + destroy: function() { + this.element.unbind(); + + if (this.image !== null) { + this.image.remove(); + } + + if (this.button !== null) { + this.button.remove(); + } + + if (this.dialog !== null) { + this.dialog.remove(); + } + }, + + _setOption: function(key, value){ + var self = this; + + switch (key) { + case "disabled": + if (value) { + self.dialog.addClass('ui-colorpicker-disabled'); + } else { + self.dialog.removeClass('ui-colorpicker-disabled'); + } + break; + } + + $.Widget.prototype._setOption.apply(self, arguments); + }, + + _setAltField: function () { + if (this.options.altField && this.options.altProperties) { + var index, + property, + properties = this.options.altProperties.split(','); + + for (index in properties) { + property = $.trim(properties[index]); + switch (property) { + case 'color': + case 'background-color': + case 'outline-color': + case 'border-color': + $(this.options.altField).css(property, this.color.toCSS()); + break; + } + } + + if (this.options.altAlpha) { + $(this.options.altField).css('opacity', this.color.a); + } + } + }, + + _loadColor: function () { + var rgb = this._parseColor(this.options.color); //@todo + this.color = (rgb === false ? new this.Color() : new this.Color(rgb[0], rgb[1], rgb[2])); + this.currentColor = $.extend({}, this.color); + + this._setAltField(); + }, + + _generate: function () { + var self = this, + index, + part, + parts_list; + + // Determine the parts to include in this colorpicker + if (typeof self.options.parts === 'string') { + if (self.options.parts in _parts_lists) { + parts_list = _parts_lists[self.options.parts]; + } else { + // automatic + parts_list = _parts_lists[self.inline ? 'inline' : 'popup']; + } + } else { + parts_list = self.options.parts; + } + + // Add any parts to the internal parts list + self.parts = {}; + for (index in parts_list) { + part = parts_list[index]; + if (part in self._parts) { + self.parts[part] = new self._parts[part](self); + } + } + + + if (typeof this.color !== "object" || this.color.constructor !== this.Color) { + self._loadColor(); + } + + if (!self.generated) { + var layout_parts = []; + + for (index in self.options.layout) { + if (index in self.parts) { + layout_parts.push({ + part: index, + pos: self.options.layout[index] + }); + } + } + + $(self._layoutTable(layout_parts, function(cell, x, y) { + var classes = []; + + if (x > 0) { + classes.push('ui-colorpicker-padding-left'); + } + + if (y > 0) { + classes.push('ui-colorpicker-padding-top'); + } + + return ' 1 ? ' colspan="' + cell.pos[2] + '"' : '') + + (cell.pos[3] > 1 ? ' rowspan="' + cell.pos[3] + '"' : '') + + (classes.length > 0 ? ' class="' + classes.join(' ') + '"' : '') + + ' valign="top">'; + })).appendTo(self.dialog).addClass('ui-dialog-content ui-widget-content'); + + self._initAllParts(); + self._generateAllParts(); + self.generated = true; + } + }, + + _layoutTable: function(layout, callback) { + var layout = layout.sort(function(a, b) { + if (a.pos[1] == b.pos[1]) { + return a.pos[0] - b.pos[0]; + } + return a.pos[1] - b.pos[1]; + }), + bitmap, + x, + y, + width, height, + columns, rows, + index, + cell, + html; + + // Determine dimensions of the table + width = 0; + height = 0; + for (index in layout) { + width = Math.max(width, layout[index].pos[0] + layout[index].pos[2]); + height = Math.max(height, layout[index].pos[1] + layout[index].pos[3]); + } + + // Initialize bitmap + bitmap = []; + for (x = 0; x < width; ++x) { + bitmap.push(new Array(height)); + } + + // Mark rows and columns which have layout assigned + rows = new Array(height); + columns = new Array(width); + for (index in layout) { + // mark columns + for (x = 0; x < layout[index].pos[2]; x += 1) { + columns[layout[index].pos[0] + x] = true; + } + for (y = 0; y < layout[index].pos[3]; y += 1) { + rows[layout[index].pos[1] + y] = true; + } + } + + // Generate the table + html = ''; + cell = layout[index = 0]; + for (y = 0; y < height; ++y) { + html += ''; + for (x = 0; x < width;) { + if (cell !== undefined && x == cell.pos[0] && y == cell.pos[1]) { + // Create a "real" cell + var w, + h; + + html += callback(cell, x, y); + + for (h = 0; h < cell.pos[3]; h +=1) { + for (w = 0; w < cell.pos[2]; w +=1) { + bitmap[x + w][y + h] = true; + } + } + + x += cell.pos[2]; + cell = layout[++index]; + } else { + // Fill in the gaps + var colspan = 0; + var walked = false; + + while (x < width && bitmap[x][y] === undefined && (cell === undefined || y < cell.pos[1] || (y == cell.pos[1] && x < cell.pos[0]))) { + if (columns[x] === true) { + colspan += 1; + } + walked = true; + x += 1; + } + + if (colspan > 0) { + html += ''; + } else if (!walked) { + x += 1; + } + } + } + html += ''; + } + + return '' + html + '
'; + }, + + _effectGeneric: function (show, slide, fade, callback) { + var self = this; + + if ($.effects && $.effects[self.options.showAnim]) { + self.dialog[show](self.options.showAnim, self.options.showOptions, self.options.duration, callback); + } else { + self.dialog[(self.options.showAnim === 'slideDown' ? + slide + : (self.options.showAnim === 'fadeIn' ? + fade + : show))]((self.options.showAnim ? self.options.duration : null), callback); + if (!self.options.showAnim || !self.options.duration) { + callback(); + } + } + }, + + _effectShow: function (callback) { + this._effectGeneric('show', 'slideDown', 'fadeIn', callback); + }, + + _effectHide: function (callback) { + this._effectGeneric('hide', 'slideUp', 'fadeOut', callback); + }, + + open: function () { + if (!this.opened) { + this._generate(); + + var offset = this.element.offset(), + x = offset.left, + y = offset.top + this.element.outerHeight(); + x -= Math.max(0, (x + this.dialog.width()) - $(window).width() + 20); + y -= Math.max(0, (y + this.dialog.height()) - $(window).height() + 20); + this.dialog.css({'left': x, 'top': y}); + + this._effectShow(); + this.opened = true; + } + }, + + close: function () { + var self = this; + + this._setAltField(); + + self.currentColor = $.extend({}, self.color); + self.changed = false; + + // tear down the interface + self._effectHide(function () { + self.dialog.empty(); + self.generated = false; + + self.opened = false; + self._callback(self.options.onClose); + }); + }, + + _callback: function (f) { + var self = this; + + if (f instanceof Function) { + f(self.color.toCSS(), { + r: self.color.r, + g: self.color.g, + b: self.color.b, + a: self.color.a + }, self); + } + }, + + _generateAllParts: function () { + $.each(this.parts, function (index, part) { + part.generate(); + }); + }, + + _initAllParts: function () { + $.each(this.parts, function (index, part) { + part.init(); + }); + }, + + _change: function () { + this.changed = true; + + switch (this.options.limit) { + case 'websafe': + this.color.limit(6); + break; + + case 'nibble': + this.color.limit(16); + break; + + case 'binary': + this.color.limit(2); + break; + } + + // update colors + if (!this.inline) { + if (!this.color.equals(this._parseHex(this.element.val()))) { + this.element.val(this.color.toHex()); + } + + if (this.image && this.options.buttonColorize) { + this.image.css('background-color', this.color.toCSS()); + } + + if (this.options.altOnChange) { + this._setAltField(); + } + } + + // callback + this._callback(this.options.onSelect); + + $.each(this.parts, function (index, part) { + part.repaint(); + }); + }, + + _intToHex: function (dec) { + var result = dec.toString(16); + if (result.length === 1) { + result = ('0' + result); + } + return result.toLowerCase(); + }, + + // This will be deprecated by jQueryUI 1.9 widget + _hoverable: function (e) { + e.hover(function () { + e.addClass("ui-state-hover"); + }, function () { + e.removeClass("ui-state-hover"); + }); + }, + + // This will be deprecated by jQueryUI 1.9 widget + _focusable: function (e) { + e.focus(function () { + e.addClass("ui-state-focus"); + }).blur(function () { + e.removeClass("ui-state-focus"); + }); + }, + + _parts: { + header: function (inst) { + var self = this, + e = null, + _html; + + _html = function () { + return '
'; + }; + + this.init = function () { + e = $(_html()).prependTo(inst.dialog); + var close = $('.ui-dialog-titlebar-close', e); + inst._hoverable(close); + inst._focusable(close); + + close.click( function() { + inst.close() + }); + }; + + this.repaint = function () { + }; + + this.generate = function () { + this.repaint(); + }; + }, + + map: function (inst) { + var self = this, + e = null, + _mousedown, _mouseup, _mousemove, _html; + + _mousedown = function (event) { + if (!inst.opened) { + return; + } + + var div = $('#ui-colorpicker-map-layer-pointer', e), + offset = div.offset(), + width = div.width(), + height = div.height(), + x = event.pageX - offset.left, + y = event.pageY - offset.top; + + if (x >= 0 && x < width && y >= 0 && y < height) { + event.stopImmediatePropagation(); + event.preventDefault(); + $(document).unbind('mousedown', _mousedown); + $(document).bind('mouseup', _mouseup); + $(document).bind('mousemove', _mousemove); + _mousemove(event); + } + }; + + _mouseup = function (event) { + event.stopImmediatePropagation(); + event.preventDefault(); + $(document).unbind('mouseup', _mouseup); + $(document).unbind('mousemove', _mousemove); + $(document).bind('mousedown', _mousedown); + }; + + _mousemove = function (event) { + event.stopImmediatePropagation(); + event.preventDefault(); + + if (event.pageX === self.x && event.pageY === self.y) { + return; + } + self.x = event.pageX; + self.y = event.pageY; + + var div = $('#ui-colorpicker-map-layer-pointer', e), + offset = div.offset(), + width = div.width(), + height = div.height(), + x = event.pageX - offset.left, + y = event.pageY - offset.top; + + x = Math.max(0, Math.min(x / width, 1)); + y = Math.max(0, Math.min(y / height, 1)); + + // interpret values + switch (inst.mode) { + case 'h': + inst.color.s = x; + inst.color.v = 1 - y; + inst.color.updateRGB(); + break; + + case 's': + case 'a': + inst.color.h = x; + inst.color.v = 1 - y; + inst.color.updateRGB(); + break; + + case 'v': + inst.color.h = x; + inst.color.s = 1 - y; + inst.color.updateRGB(); + break; + + case 'r': + inst.color.b = x; + inst.color.g = 1 - y; + inst.color.updateHSV(); + break; + + case 'g': + inst.color.b = x; + inst.color.r = 1 - y; + inst.color.updateHSV(); + break; + + case 'b': + inst.color.r = x; + inst.color.g = 1 - y; + inst.color.updateHSV(); + break; + } + + inst._change(); + }; + + _html = function () { + var html = '
' + + ' ' + + ' ' + + (inst.options.alpha ? ' ' : '') + + '
'; + return html; + }; + + this.generate = function () { + switch (inst.mode) { + case 'h': + $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 0', 'opacity': ''}).show(); + $('#ui-colorcasepicker-map-layer-2', e).hide(); + break; + + case 's': + case 'a': + $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -260px', 'opacity': ''}).show(); + $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -520px', 'opacity': ''}).show(); + break; + + case 'v': + $(e).css('background-color', 'black'); + $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -780px', 'opacity': ''}).show(); + $('#ui-colorpicker-map-layer-2', e).hide(); + break; + + case 'r': + $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -1040px', 'opacity': ''}).show(); + $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -1300px', 'opacity': ''}).show(); + break; + + case 'g': + $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -1560px', 'opacity': ''}).show(); + $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -1820px', 'opacity': ''}).show(); + break; + + case 'b': + $('#ui-colorpicker-map-layer-1', e).css({'background-position': '0 -2080px', 'opacity': ''}).show(); + $('#ui-colorpicker-map-layer-2', e).css({'background-position': '0 -2340px', 'opacity': ''}).show(); + break; + } + self.repaint(); + }; + + this.repaint = function () { + var div = $('#ui-colorpicker-map-layer-pointer', e), + x = 0, + y = 0; + + switch (inst.mode) { + case 'h': + x = inst.color.s * div.width(); + y = (1 - inst.color.v) * div.width(); + $(e).css('background-color', inst.color.normClone().toCSS()); + break; + + case 's': + case 'a': + x = inst.color.h * div.width(); + y = (1 - inst.color.v) * div.width(); + $('#ui-colorpicker-map-layer-2', e).css('opacity', 1 - inst.color.s); + break; + + case 'v': + x = inst.color.h * div.width(); + y = (1 - inst.color.s) * div.width(); + $('#ui-colorpicker-map-layer-1', e).css('opacity', inst.color.v); + break; + + case 'r': + x = inst.color.b * div.width(); + y = (1 - inst.color.g) * div.width(); + $('#ui-colorpicker-map-layer-2', e).css('opacity', inst.color.r); + break; + + case 'g': + x = inst.color.b * div.width(); + y = (1 - inst.color.r) * div.width(); + $('#ui-colorpicker-map-layer-2', e).css('opacity', inst.color.g); + break; + + case 'b': + x = inst.color.r * div.width(); + y = (1 - inst.color.g) * div.width(); + $('#ui-colorpicker-map-layer-2', e).css('opacity', inst.color.b); + break; + } + + if (inst.options.alpha) { + $('#ui-colorpicker-map-layer-alpha', e).css('opacity', 1 - inst.color.a); + } + + $('#ui-colorpicker-map-pointer', e).css({ + 'left': x - 7, + 'top': y - 7 + }); + }; + + this.init = function () { + e = $(_html()).appendTo($('#ui-colorpicker-map-container', inst.dialog)); + + e.bind('mousedown', _mousedown); + }; + }, + + bar: function (inst) { + var self = this, + e = null, + _mousedown, _mouseup, _mousemove, _html; + + _mousedown = function (event) { + if (!inst.opened) { + return; + } + + var div = $('#ui-colorpicker-bar-layer-pointer', e), + offset = div.offset(), + width = div.width(), + height = div.height(), + x = event.pageX - offset.left, + y = event.pageY - offset.top; + + if (x >= 0 && x < width && y >= 0 && y < height) { + event.stopImmediatePropagation(); + event.preventDefault(); + $(document).unbind('mousedown', _mousedown); + $(document).bind('mouseup', _mouseup); + $(document).bind('mousemove', _mousemove); + _mousemove(event); + } + }; + + _mouseup = function (event) { + event.stopImmediatePropagation(); + event.preventDefault(); + $(document).unbind('mouseup', _mouseup); + $(document).unbind('mousemove', _mousemove); + $(document).bind('mousedown', _mousedown); + }; + + _mousemove = function (event) { + event.stopImmediatePropagation(); + event.preventDefault(); + + if (event.pageY === self.y) { + return; + } + self.y = event.pageY; + + var div = $('#ui-colorpicker-bar-layer-pointer', e), + offset = div.offset(), + height = div.height(), + y = event.pageY - offset.top; + + y = Math.max(0, Math.min(y / height, 1)); + + // interpret values + switch (inst.mode) { + case 'h': + inst.color.h = 1 - y; + inst.color.updateRGB(); + break; + + case 's': + inst.color.s = 1 - y; + inst.color.updateRGB(); + break; + + case 'v': + inst.color.v = 1 - y; + inst.color.updateRGB(); + break; + + case 'r': + inst.color.r = 1 - y; + inst.color.updateHSV(); + break; + + case 'g': + inst.color.g = 1 - y; + inst.color.updateHSV(); + break; + + case 'b': + inst.color.b = 1 - y; + inst.color.updateHSV(); + break; + + case 'a': + inst.color.a = 1 - y; + break; + } + + inst._change(); + }; + + _html = function () { + var html = '
' + + ' ' + + ' ' + + ' ' + + ' '; + + if (inst.options.alpha) { + html += ' ' + + ' '; + } + + html += '
'; + + return html; + }; + + this.generate = function () { + switch (inst.mode) { + case 'h': + case 's': + case 'v': + case 'r': + case 'g': + case 'b': + $('#ui-colorpicker-bar-layer-alpha', e).show(); + $('#ui-colorpicker-bar-layer-alphabar', e).hide(); + break; + + case 'a': + $('#ui-colorpicker-bar-layer-alpha', e).hide(); + $('#ui-colorpicker-bar-layer-alphabar', e).show(); + break; + } + + switch (inst.mode) { + case 'h': + $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 0', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-2', e).hide(); + $('#ui-colorpicker-bar-layer-3', e).hide(); + $('#ui-colorpicker-bar-layer-4', e).hide(); + break; + + case 's': + $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -260px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -520px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-3', e).hide(); + $('#ui-colorpicker-bar-layer-4', e).hide(); + break; + + case 'v': + $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -520px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-2', e).hide(); + $('#ui-colorpicker-bar-layer-3', e).hide(); + $('#ui-colorpicker-bar-layer-4', e).hide(); + break; + + case 'r': + $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -1560px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -1300px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-3', e).css({'background-position': '0 -780px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-4', e).css({'background-position': '0 -1040px', 'opacity': ''}).show(); + break; + + case 'g': + $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -2600px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -2340px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-3', e).css({'background-position': '0 -1820px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-4', e).css({'background-position': '0 -2080px', 'opacity': ''}).show(); + break; + + case 'b': + $('#ui-colorpicker-bar-layer-1', e).css({'background-position': '0 -3640px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-2', e).css({'background-position': '0 -3380px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-3', e).css({'background-position': '0 -2860px', 'opacity': ''}).show(); + $('#ui-colorpicker-bar-layer-4', e).css({'background-position': '0 -3120px', 'opacity': ''}).show(); + break; + + case 'a': + $('#ui-colorpicker-bar-layer-1', e).hide(); + $('#ui-colorpicker-bar-layer-2', e).hide(); + $('#ui-colorpicker-bar-layer-3', e).hide(); + $('#ui-colorpicker-bar-layer-4', e).hide(); + break; + } + self.repaint(); + }; + + this.repaint = function () { + var div = $('#ui-colorpicker-bar-layer-pointer', e), + y = 0; + + switch (inst.mode) { + case 'h': + y = (1 - inst.color.h) * div.height(); + break; + + case 's': + y = (1 - inst.color.s) * div.height(); + $('#ui-colorpicker-bar-layer-2', e).css('opacity', 1 - inst.color.v); + $(e).css('background-color', inst.color.normClone().toCSS()); + break; + + case 'v': + y = (1 - inst.color.v) * div.height(); + $(e).css('background-color', inst.color.normClone().toCSS()); + break; + + case 'r': + y = (1 - inst.color.r) * div.height(); + $('#ui-colorpicker-bar-layer-2', e).css('opacity', Math.max(0, (inst.color.b - inst.color.g))); + $('#ui-colorpicker-bar-layer-3', e).css('opacity', Math.max(0, (inst.color.g - inst.color.b))); + $('#ui-colorpicker-bar-layer-4', e).css('opacity', Math.min(inst.color.b, inst.color.g)); + break; + + case 'g': + y = (1 - inst.color.g) * div.height(); + $('#ui-colorpicker-bar-layer-2', e).css('opacity', Math.max(0, (inst.color.b - inst.color.r))); + $('#ui-colorpicker-bar-layer-3', e).css('opacity', Math.max(0, (inst.color.r - inst.color.b))); + $('#ui-colorpicker-bar-layer-4', e).css('opacity', Math.min(inst.color.r, inst.color.b)); + break; + + case 'b': + y = (1 - inst.color.b) * div.height(); + $('#ui-colorpicker-bar-layer-2', e).css('opacity', Math.max(0, (inst.color.r - inst.color.g))); + $('#ui-colorpicker-bar-layer-3', e).css('opacity', Math.max(0, (inst.color.g - inst.color.r))); + $('#ui-colorpicker-bar-layer-4', e).css('opacity', Math.min(inst.color.r, inst.color.g)); + break; + + case 'a': + y = (1 - inst.color.a) * div.height(); + $(e).css('background-color', inst.color.normClone().toCSS()); + break; + } + + if (inst.mode !== 'a') { + $('#ui-colorpicker-bar-layer-alpha', e).css('opacity', 1 - inst.color.a); + } + + $('#ui-colorpicker-bar-pointer', e).css('top', y - 3); + }; + + this.init = function () { + e = $(_html()).appendTo($('#ui-colorpicker-bar-container', inst.dialog)); + + e.bind('mousedown', _mousedown); + }; + }, + + inputs: function (inst) { + var self = this, + e = null, + _html; + + _html = function () { + var html = '
'; + + if (inst.options.hsv) { + html += '
°
' + + '
%
' + + '
%
'; + } + + if (inst.options.rgb) { + html += '
' + + '
' + + '
'; + } + + if (inst.options.alpha) { + html += '
%
'; + } + + return html + '
'; + }; + + this.init = function () { + e = $(_html()).appendTo($('#ui-colorpicker-inputs-container', inst.dialog)); + + $('.ui-colorpicker-mode', e).click(function () { + inst.mode = $(this).val(); + inst._generateAllParts(); + }); + + $('.ui-colorpicker-number', e).bind('change input keyup', function () { + inst.color.r = $('#ui-colorpicker-r .ui-colorpicker-number', e).val() / 255; + inst.color.g = $('#ui-colorpicker-g .ui-colorpicker-number', e).val() / 255; + inst.color.b = $('#ui-colorpicker-b .ui-colorpicker-number', e).val() / 255; + inst.color.a = $('#ui-colorpicker-a .ui-colorpicker-number', e).val() / 100; + inst.color.h = $('#ui-colorpicker-h .ui-colorpicker-number', e).val() / 360; + inst.color.s = $('#ui-colorpicker-s .ui-colorpicker-number', e).val() / 100; + inst.color.v = $('#ui-colorpicker-v .ui-colorpicker-number', e).val() / 100; + + if ($(this).hasClass('ui-colorpicker-number-hsv')) { + inst.color.updateRGB(); + } else if ($(this).hasClass('ui-colorpicker-number-rgb')) { + inst.color.updateHSV(); + } + + inst._change(); + }); + }; + + this.repaint = function () { + var c = $.extend(inst.color); + c.h *= 360; + c.s *= 100; + c.v *= 100; + c.r *= 255; + c.g *= 255; + c.b *= 255; + c.a *= 100; + + $.each(c, function (index, value) { + var v = Math.round(value); + if (!$('#ui-colorpicker-' + index + ' .ui-colorpicker-number', e).is(':focus') + && $('#ui-colorpicker-' + index + ' .ui-colorpicker-number', e).val() !== v) { + $('#ui-colorpicker-' + index + ' .ui-colorpicker-number', e).val(v); + } + }); + }; + + this.generate = function () { + $('.ui-colorpicker-mode', e).each(function () { + $(this).attr('checked', $(this).val() === inst.mode); + }); + this.repaint(); + }; + }, + + preview: function (inst) { + var self = this, + e = null, + _html; + + _html = function () { + return '
' + + '' + + '
' + + '
' + + '
' + + '
'; + }; + + this.init = function () { + e = $(_html()).appendTo($('#ui-colorpicker-preview-container', inst.dialog)); + + $('#ui-colorpicker-preview-initial', e).click(function () { + inst.color = $.extend({}, inst.currentColor); + inst._change(); + }); + + }; + + this.repaint = function () { + $('#ui-colorpicker-preview-initial', e).css('background-color', inst.currentColor.toCSS()).attr('title', inst.currentColor.toHex()); + $('#ui-colorpicker-preview-initial-alpha', e).css('opacity', 1 - inst.currentColor.a); + $('#ui-colorpicker-preview-current', e).css('background-color', inst.color.toCSS()).attr('title', inst.color.toHex()); + $('#ui-colorpicker-preview-current-alpha', e).css('opacity', 1 - inst.color.a); + }; + + this.generate = function () { + if (inst.options.alpha) { + $('#ui-colorpicker-preview-initial-alpha, #ui-colorpicker-preview-current-alpha', e).show(); + } else { + $('#ui-colorpicker-preview-initial-alpha, #ui-colorpicker-preview-current-alpha', e).hide(); + } + + this.repaint(); + }; + }, + + hex: function (inst) { + var self = this, + e = null, + _html; + + _html = function () { + var html = ''; + + if (inst.options.alpha) { + html += ''; + } + + html += ''; + + return '
' + html + '
'; + }; + + this.init = function () { + e = $(_html()).appendTo($('#ui-colorpicker-hex-container', inst.dialog)); + + $('#ui-colorpicker-hex-input', e).bind('change keyup', function () { + var rgb = inst._parseHex($(this).val()); + inst.color.r = rgb[0]; + inst.color.g = rgb[1]; + inst.color.b = rgb[2]; + inst.color.updateHSV(); + inst._change(); + }); + + $('#ui-colorpicker-hex-alpha', e).bind('change keyup', function () { + inst.color.a = parseInt($('#ui-colorpicker-hex-alpha', e).val(), 16); + inst._change(); + }); + }; + + this.repaint = function () { + if (!$('#ui-colorpicker-hex-input', e).is(':focus')) { + $('#ui-colorpicker-hex-input', e).val(inst.color.toHex(true)); + } + + if (!$('#ui-colorpicker-hex-alpha', e).is(':focus')) { + $('#ui-colorpicker-hex-alpha', e).val(inst._intToHex(inst.color.a * 255)); + } + }; + + this.generate = function () { + this.repaint(); + }; + }, + + swatches: function (inst) { + var self = this, + e = null, + _html; + + _html = function () { + var html = ''; + + $.each(inst.options.swatches, function (name, color) { + var hex = inst._intToHex(color[0]) + inst._intToHex(color[1]) + inst._intToHex(color[2]); + html += '
'; + }); + + return '
' + html + '
'; + }; + + this.init = function () { + e = $(_html()).appendTo($('#ui-colorpicker-swatches-container', inst.dialog)); + + $('.ui-colorpicker-swatch', e).click(function () { + var rgb = inst._parseColor($(this).css('background-color')); + inst.color = (rgb === false ? new inst.Color() : new inst.Color(rgb[0], rgb[1], rgb[2])); + inst._change(); + }); + }; + + this.repaint = function () { + // Not affected by changing color; + }; + + this.generate = function () { + // Not affected by changing color; + }; + }, + + footer: function (inst) { + var self = this, + e = null, + _html; + + _html = function () { + return '
' + + (inst.options.alpha ? '' : '') + + (inst.inline ? '' : '
' + + '' + + '
') + + '
'; + }; + + this.init = function () { + e = $(_html()).appendTo(inst.dialog); + + $('.ui-colorpicker-close', e).button().click(function () { + inst.close(); + }); + + if (inst.options.alpha) { + $('.ui-colorpicker-transparent', e).button().click(function () { + inst.color.a = 0; + inst._change(); + }); + } + }; + + this.repaint = function () {}; + + this.generate = function () {}; + } + }, + + _parseHex: function (color) { + var name = $.trim(color).toLowerCase(), + c, + m; + + if (_colors[name]) { + c = _colors[name]; + return [c[0] / 255, c[1] / 255, c[2] / 255]; + } + + // {#}rrggbb + m = /^#?([a-fA-F0-9]{0,6})/.exec(color); + if (m) { + c = parseInt(m[1], 16); + return [((c >> 16) & 0xFF) / 255, + ((c >> 8) & 0xFF) / 255, + (c & 0xFF) / 255]; + } + }, + + _parseColor: function (color) { + var m; + + // rgba(r,g,b,a) + m = /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/.exec(color); + if (m) { + return [ + m[1] / 255, + m[2] / 255, + m[3] / 255, + m[4] / 255 + ]; + } + + // rgba(r%,g%,b%,a%) + m = /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/.exec(color); + if (m) { + return [ + m[1] / 100, + m[2] / 100, + m[3] / 100, + m[4] / 100 + ]; + } + + // #rrggbb + m = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color); + if (m) { + return [ + parseInt(m[1], 16) / 255, + parseInt(m[2], 16) / 255, + parseInt(m[3], 16) / 255 + ]; + } + + // #rgb + m = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color); + if (m) { + return [ + parseInt(m[1] + m[1], 16) / 255, + parseInt(m[2] + m[2], 16) / 255, + parseInt(m[3] + m[3], 16) / 255 + ]; + } + + return this._parseHex(color); + }, + + Color: function () { + var a, args = arguments; + + this.updateRGB = function () { + this.h = Math.max(0, Math.min(this.h, 1)); + this.s = Math.max(0, Math.min(this.s, 1)); + this.v = Math.max(0, Math.min(this.v, 1)); + + if (this.s === 0) { + this.r = this.g = this.b = this.v; + } else { + var var_h = this.h === 1 ? 0 : this.h * 6, + var_i = Math.floor(var_h), + var_1 = this.v * (1 - this.s), + var_2 = this.v * (1 - this.s * (var_h - var_i)), + var_3 = this.v * (1 - this.s * (1 - (var_h - var_i))); + + if (var_i === 0) { + this.r = this.v; + this.g = var_3; + this.b = var_1; + } else if (var_i === 1) { + this.r = var_2; + this.g = this.v; + this.b = var_1; + } else if (var_i === 2) { + this.r = var_1; + this.g = this.v; + this.b = var_3; + } else if (var_i === 3) { + this.r = var_1; + this.g = var_2; + this.b = this.v; + } else if (var_i === 4) { + this.r = var_3; + this.g = var_1; + this.b = this.v; + } else { + this.r = this.v; + this.g = var_1; + this.b = var_2; + } + } + return this; + }; + + this.updateHSV = function () { + var minVal, maxVal, delta, del_R, del_G, del_B; + this.r = Math.max(0, Math.min(this.r, 1)); + this.g = Math.max(0, Math.min(this.g, 1)); + this.b = Math.max(0, Math.min(this.b, 1)); + + minVal = Math.min(this.r, this.g, this.b); + maxVal = Math.max(this.r, this.g, this.b); + delta = maxVal - minVal; + + this.v = maxVal; + + if (delta === 0) { + this.h = 0; + this.s = 0; + } else { + this.s = delta / maxVal; + del_R = (((maxVal - this.r) / 6) + (delta / 2)) / delta; + del_G = (((maxVal - this.g) / 6) + (delta / 2)) / delta; + del_B = (((maxVal - this.b) / 6) + (delta / 2)) / delta; + + if (this.r === maxVal) { + this.h = del_B - del_G; + } else if (this.g === maxVal) { + this.h = (1 / 3) + del_R - del_B; + } else if (this.b === maxVal) { + this.h = (2 / 3) + del_G - del_R; + } + + if (this.h < 0) { + this.h += 1; + } else if (this.h > 1) { + this.h -= 1; + } + } + return this; + }; + + this._hexify = function (number) { + // return Math.round(number).toString(16); + var digits = '0123456789abcdef', + lsd = number % 16, + msd = (number - lsd) / 16, + hexified = digits.charAt(msd) + digits.charAt(lsd); + return hexified; + }; + + this.toHex = function () { + return this._hexify(this.r * 255) + this._hexify(this.g * 255) + this._hexify(this.b * 255); + }; + + this.toCSS = function () { + return '#' + this.toHex(); + }; + + this.toHexAlpha = function () { + return this._hexify(this.a * 255); + }; + + this.normClone = function () { + return $.extend({}, this, {s: 1, v: 1}).updateRGB(); + }; + + this.equals = function (rgb) { + return rgb[0] === this.r + && rgb[1] === this.g + && rgb[2] === this.b; + }; + + this.limit = function (steps) { + steps -= 1; + this.r = Math.round(this.r * steps) / steps; + this.g = Math.round(this.g * steps) / steps; + this.b = Math.round(this.b * steps) / steps; + this.updateHSV(); + }; + + for (a = 0; a < args.length; a += 1) { + args[a] = Math.max(0, Math.min(args[a], 1)); + } + + if (args.length === 0) { + this.r = 0; + this.g = 0; + this.b = 0; + this.a = 1; + this.h = 0; + this.s = 0; + this.v = 0; + } else if (args.length === 3) { + // r,g,b + this.r = args[0] || 0; + this.g = args[1] || 0; + this.b = args[2] || 0; + this.a = 1; + this.updateHSV(); + } else if (args.length === 7) { + // r,g,b,a,h,s,v + this.r = args[0] || 0; + this.g = args[1] || 0; + this.b = args[2] || 0; + this.a = args[3] || 0; + this.h = args[4] || 0; + this.s = args[5] || 0; + this.v = args[6] || 0; + } + } + }); + +}(jQuery)); diff --git a/public/javascripts/jqplot/examples/cursor-highlighter.html b/public/javascripts/jqplot/examples/cursor-highlighter.html new file mode 100644 index 0000000..ef35aeb --- /dev/null +++ b/public/javascripts/jqplot/examples/cursor-highlighter.html @@ -0,0 +1,137 @@ + + + + + + Data Point Highlighting, Tooltips and Cursor Tracking + + + + + + + + + + + + + +
+ + + + + + +

The Highlighter plugin will highlight data points near the mouse and display an optional tooltip with the data point value. By default, the tooltip values will be formatted with the same formatter as used to display the axes tick values. The text format can be customized with an optional sprintf style format string.

+ +
+ +

+
+

The Cursor plugin changes the mouse cursor when it enters the graph area and displays an optional tooltip with the mouse position. The tooltip can be in a fixed location, or it can follow the mouse. The pointer style, set to "crosshair" by default, can also be customized. Tooltip values are formatted similar to the Highlighter plugin. By default they use the axes formatters, but can be customized with a sprintf format string.

+ +
+ +

+
+
+  
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/customHighlighterCursorTrendline.html b/public/javascripts/jqplot/examples/customHighlighterCursorTrendline.html new file mode 100644 index 0000000..d5ed6ce --- /dev/null +++ b/public/javascripts/jqplot/examples/customHighlighterCursorTrendline.html @@ -0,0 +1,104 @@ + + + + + + Highlighting, Dragging Points, Cursor and Trend Lines. + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/dashboardWidget.html b/public/javascripts/jqplot/examples/dashboardWidget.html new file mode 100644 index 0000000..d57f1de --- /dev/null +++ b/public/javascripts/jqplot/examples/dashboardWidget.html @@ -0,0 +1,212 @@ + + + + + + Animated Dashboard Sample - Filled Line with Log Axis + + + + + + + + + + + + + +
+ + + + + + + + + +
+
Hi Powered Data
+
+
+
+
+ +

+
+    
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+    
+    
+    
+    
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/dashedLines.html b/public/javascripts/jqplot/examples/dashedLines.html new file mode 100644 index 0000000..d1bf48f --- /dev/null +++ b/public/javascripts/jqplot/examples/dashedLines.html @@ -0,0 +1,227 @@ + + + + + + Dashed Lines with Smoothing + + + + + + + + + + + + + +
+ + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/data-renderers.html b/public/javascripts/jqplot/examples/data-renderers.html new file mode 100644 index 0000000..ba835d5 --- /dev/null +++ b/public/javascripts/jqplot/examples/data-renderers.html @@ -0,0 +1,144 @@ + + + + + + AJAX and JSON Data Loading via Data Renderers + + + + + + + + + + + + + +
+ + + + + + +

Data renderers allow jqPlot to pull data from any external source (e.g. a function implementing an AJAX call). Simply assign the external source to the "dataRenderer" plot option. The only requirement on data renderers is that it must return a valid jqPlot data array.

+ +
+ +

+
+
+

Data renderers get passed options by the plot. The signiture for a data renderer is:

+ + +
+function(userData, plotObject, options) {
+  ...
+  return data;
+}
+
+ + +

Where userData is whatever data was passed into the plot, plotObject is a reference back to the plot itself, and options are any options passed into the plots "dataRendererOption" option. The following example shows a more complicated example which uses ajax pulls data from an external json data source.

+ +
+ +

+
+
+
+
+  
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/date-axes.html b/public/javascripts/jqplot/examples/date-axes.html new file mode 100644 index 0000000..4fa3f62 --- /dev/null +++ b/public/javascripts/jqplot/examples/date-axes.html @@ -0,0 +1,107 @@ + + + + + + Date Axes + + + + + + + + + + + + + +
+ + + + + +

Date axes support is provided through the dateAxisRenderer plugin. Date axes expand javascripts native date handling capabilities. This allow dates to be input in almost any unambiguous form, not just in milliseconds!

+ +

Note, although jqPlot will parse most any human readable date, it is safest to use javascript time stamps when possible. Also, it is best to specify a date and time and not just a date alone. This is due to inconsistent browser handling of local time vs. UTC with bare dates.

+ +
+ +

+
+

Date Axes also provide powerful formatting features. This allows custom formatter strings to be used to format axis tick labels precisely the way you want.

+ +
+ +

+  
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+    
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/dateAxisLogAxisZooming.html b/public/javascripts/jqplot/examples/dateAxisLogAxisZooming.html new file mode 100644 index 0000000..81f0f1c --- /dev/null +++ b/public/javascripts/jqplot/examples/dateAxisLogAxisZooming.html @@ -0,0 +1,101 @@ + + + + + + Zooming with Date and Log Axes + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/dateAxisRenderer.html b/public/javascripts/jqplot/examples/dateAxisRenderer.html new file mode 100644 index 0000000..b0b72fb --- /dev/null +++ b/public/javascripts/jqplot/examples/dateAxisRenderer.html @@ -0,0 +1,292 @@ + + + + + + Date Axes + + + + + + + + + + + + + +
+ + + + + + +

Date axis renderer with default settings. Ticks are given wider spacing by default since date axes typically have longer tick labels.

+
+

Date axis recognizes rotated tick labels. It will space ticks a little closer when labels are rotated.

+
+

If you want more or less ticks, specify the "numberTicks" options. Date axes will try to produce the desired number of ticks, but may adjust to get a nice interval.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/public/javascripts/jqplot/examples/example.js b/public/javascripts/jqplot/examples/example.js new file mode 100644 index 0000000..ff85cd2 --- /dev/null +++ b/public/javascripts/jqplot/examples/example.js @@ -0,0 +1,114 @@ +$(document).ready(function(){ + if (!$.jqplot._noCodeBlock) { + $('script.code').each(function(index) { + if ($('pre.code').eq(index).length ) { + $('pre.code').eq(index).text($(this).html()); + } + else { + // var str = $(this).text(); + // $('div.jqplot-target').eq(index).after($('
'+str+'
')); + var pre = $('
');
+                $('div.jqplot-target').eq(index).after(pre);
+                pre.text($(this).html());
+                pre = null;
+            }
+        });
+
+        $('script.common').each(function(index) {
+            $('pre.common').eq(index).text($(this).html());
+        });
+
+        var elstr='';
+        if ($('script.include, link.include').length > 0) {
+
+            if ($('pre.include').length == 0) {
+                var temp = [
+                    '
', + '

The charts on this page depend on the following files:

', + '
',
+                    '
' + ]; + + temp = $(temp.join('\n')); + $('div.example-content').append(temp); + temp = null; + } + + + $('script.include').each(function(index) { + if (elstr !== '') { + elstr += '\n'; + } + elstr += ''; + }); + + $('link.include').each(function(index) { + if (elstr !== '') { + elstr += '\n'; + } + elstr += ''; + }) + + $('pre.include').text(elstr); + } + + else { + $('pre.include').remove(); + $('div.include').remove(); + } + } + + if (!$.jqplot.use_excanvas) { + $('div.jqplot-target').each(function(){ + var outerDiv = $(document.createElement('div')); + var header = $(document.createElement('div')); + var div = $(document.createElement('div')); + + outerDiv.append(header); + outerDiv.append(div); + + outerDiv.addClass('jqplot-image-container'); + header.addClass('jqplot-image-container-header'); + div.addClass('jqplot-image-container-content'); + + header.html('Right Click to Save Image As...'); + + var close = $(document.createElement('a')); + close.addClass('jqplot-image-container-close'); + close.html('Close'); + close.attr('href', '#'); + close.click(function() { + $(this).parents('div.jqplot-image-container').hide(500); + }) + header.append(close); + + $(this).after(outerDiv); + outerDiv.hide(); + + outerDiv = header = div = close = null; + + if (!$.jqplot._noToImageButton) { + var btn = $(document.createElement('button')); + btn.text('View Plot Image'); + btn.addClass('jqplot-image-button'); + btn.bind('click', {chart: $(this)}, function(evt) { + var imgelem = evt.data.chart.jqplotToImageElem(); + var div = $(this).nextAll('div.jqplot-image-container').first(); + div.children('div.jqplot-image-container-content').empty(); + div.children('div.jqplot-image-container-content').append(imgelem); + div.show(500); + div = null; + }); + + $(this).after(btn); + btn.after('
'); + btn = null; + } + }); + } + + SyntaxHighlighter.defaults['toolbar'] = true; + SyntaxHighlighter.all(); + + $(document).unload(function() {$('*').unbind(); }); +}); \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/example.min.js b/public/javascripts/jqplot/examples/example.min.js new file mode 100644 index 0000000..132e229 --- /dev/null +++ b/public/javascripts/jqplot/examples/example.min.js @@ -0,0 +1 @@ +$(document).ready(function(){if(!$.jqplot._noCodeBlock){$("script.code").each(function(c){if($("pre.code").eq(c).length){$("pre.code").eq(c).text($(this).html())}else{var d=$('
');$("div.jqplot-target").eq(c).after(d);d.text($(this).html());d=null}});$("script.common").each(function(c){$("pre.common").eq(c).text($(this).html())});var b="";if($("script.include, link.include").length>0){if($("pre.include").length==0){var a=['
','

The charts on this page depend on the following files:

','
',"
"];a=$(a.join("\n"));$("div.example-content").append(a);a=null}$("script.include").each(function(c){if(b!==""){b+="\n"}b+=' + + + + + +
+ + + + + + + + + +
+ +

Enter 2 series to fill between:

+ + + + + + + +

+
+
+    
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/hiddenPlotsInTabs.html b/public/javascripts/jqplot/examples/hiddenPlotsInTabs.html new file mode 100644 index 0000000..1a508ba --- /dev/null +++ b/public/javascripts/jqplot/examples/hiddenPlotsInTabs.html @@ -0,0 +1,225 @@ + + + + + + Hidden Plots + + + + + + + + + + + + + +
+ + + + + + + + +

This page demonstrates placing plots within jQuery UI widgets. Tab 2 and tab 3 contain plots. Using a combination of alternate sizing specification and the jqplot "replot" method the plots are properly displayed when their containers are shown.

+ +

The alternate sizing specifications for setting plot height and width are needed because a hidden element (or child of a hidden element) has no size. The first example in tab 2 uses custom "data-height" and "data-width" attributes on the plot target element. The second example uses "width" and "height" properties specified on the options object passed into the $.jqplot() function.

+ +

The default plot size is 300px wide by 400px high. The default setting can be overridden by specifying different values to the $.jqplot.config.defaultHeight and $.jqplot.config.defaultWidth properties. Height and width values are taken in this order of precedence: +

+ +
    +
  1. The css properties of the plot target if available (not available with display:none;).
  2. +
  3. Options object passed into the $.jqplot() function.
  4. +
  5. Custom data-height and data-width attributes on the plot target.
  6. +
  7. The config defaults.
  8. +
+ +
+ +
+ Tabs 2 and 3 have plots. Since tabs 2 and 3 are initially inactive, their contents (and the plots) are initially hidden. +
+ +
+

This plot was in an initially hidden container. It's hieght and width are set by the "data-height" and "data-width" properties of the plot container.

+
+
+ +
+

This plot is in an initially hidden container. It's height and width are set by the 'height' and 'width' properties of the options object passed into the plot constructor.

+
+
+ +
+ +

In the accordion below, section 2 contains a plot. Sizing plots in hidden accordion sections is very similar to sizing in a tab widget. Because of the default animation on accordions, however, the plot will not draw itself until the entire accordion panel is shown.

+ +
+ +

Section 1

+
+ Here is section 1 there is no plot. Section 2 has a plot that will display once the section is completely shown. +
+ +

Section 2

+
+

+ This plot also has it's height and width set with the data-height and data-width attributes. Note, if you want the accordion widget to properly size itself before the plot is shown, you must also specify a css height and width on the plot target. +

+
+
+ +
+ +

Code for generating the plots follows. It is critical to bind the callback to the UI widgets "show" or "change" method which calls the plots "replot" method. Without this, the plot won't properly redraw itself when it's container becomes visible.

+ +

+ Note in the ui.index and plot._drawCount properties in the tabsshow callback. ui.index gives the index of the activated tab. plot._drawCount keeps track of how many times the plot was visibly drawn (or redrawn/replotted). Generally, replot only needs to be called the first time the plot is visibly drawn, hence the check for plot._drawCount === 0. +

+ +

+
+ 
+
+
+
+
+
+
+    
+    
+    
+    
+
+
+
+  
+  
+  
+  
+   
+  
+
+
+
+
+	
+ + + + + + diff --git a/public/javascripts/jqplot/examples/images/logo.jpg b/public/javascripts/jqplot/examples/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a12fffcd5e43de9e69d5b2e42842837972123577 GIT binary patch literal 14632 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]f)&k9z5Ov=L+u7Ut z9qrfYQG)%m`oR!55E=vp{y)>z+rKy!mugDOkK!1aj4k2#8uQ>-Gh@Go95uT zMT>B$d3e=LJVH`Z2QMYe+|qXUuKu^H2qyx%kL>F1QeWC&?W=?D%FTFSpFLZ&*i$EP z7`{~BWa4tnR1PZKd8fK>;ESl*s^i-Nf1dXOsMJe{&Dj!cSKUjMRZr-pvDxk6tLxZ| zI}-t#%cBW$_HL%dY|CftOLUEeXtWb6b4f|AH&rYa0-j>k_0Xektw8xku(D~JNU!&k zlS(Z-Eq-DV-HF+A=9&86WaX58e&hVh&i+S#U^s?CS1A!})JOAd@>sJn(mzd>PQTlH z(DKvScT)MHRRGS;uYKVbV_J)ZW$E3wt|4O03>Mei>#F39K1sn+d0NJ{DgzgzWs=`hKC0F@5%)yHB!w|Z9B%U)Q>2n%g07=`d#wMSoJl*0V0;B zYCnE-rfvO65cxUNU|h^|4>dEEb-Pltpr&M&7#tVIORE2#u=0fdRM}S;%@Lp{jGk4o zZgaRw|ITrCUuCaKOsXwq>(8ndMNGD06+z7PhN1HFhlNP#USg(5nM66YC`4?%_uq5Q zV+mKnUGFzc`&(8YHQV~dMZ9aRY~FK|-13yt3Y!*sOx^YjsnlO-k)eZFsL1lQV5h0M zHEsD!;0U`)y=NZiR`J;O*d-k?LfXQPCrr66)Gmbo{+B7)TjQ|B4rE;i);4`cl9jq; zI_^YBj6O`I5T|;%*@I~&D;#yCoAB*Lt(M@w(0T7M*d%p{5sbB4%1%n^X&^(rKI?7>Xq*g4- z5eMVxM82g57p+el>0Z84^1MopRJH@Z<1OVy-|{I-_wCk?<|03pkMDhI{fqH1>d;55 z1*sYHru$CUhQ3y@q0iJ3&s#y>MjUko{*CGncluxQ8NOH)RJxmNOWIu`>FPFU zL?-{vU2JJW%7_(kG;xx*7> zg+iBD<9d0AGzr3G+f89a7MHCa?O0KA7S88e(#_HzXts}MVwAkJNkhtP_NAHiFJx+~ zC&Es)_b>9Ct~`e!rIioVg9}Gm8y^s!_KJSs5-0tYX`L|1MMTMG==TDM9YR^MI}Xt? zGIOUWaT(QC?lcRU>ML{7qt1IAK7LH7g7C(%!(;cO9(RcQoc$(^`k7gL}dS1 zHU4gBFA(fhpYvy7d@^GO*LN|s+|N_>&wNH14)dwp&&n&>F3O&Hah{z*MlWqoHEDz>1mc|=zmPn5>(K?>HbN{`F3&@+Vae-+8=7dATDuSv*Sqhs-uromn|ghjG$8V(`F;P-oX4jHWzQ9P zg^d+6W#!5~s`Dy@5ec>;a6{=ye(7GvX2k4*QB^>zn={uxfe-7U+`7r z!#I8>p#4=qiHGmF`Q=f^Gro7MW56EDa0ga8vba7G32!E^ATZmbFAA zOHWRMsgYkzUCOy@6UgrfhsbwzY$;i$8M0^6C%QN{w9`sX(a}za_M4v3d8%U76@^Di zKb7%AuMde)&C$wQTB7K`(h0OFIXDU3sWlU`a1HA}mn|nRyXxI-{m~Gx@j{BA4ycXB zOj$oTa~x78%*T%EaN{u8obXitY}2-K?MC|74aJd5Sq`IXkCPueGp7SjjM#hDMs@FP z6tP@Kv4mPPH4f!NH>z-#@7v39x5&m85yr%Zoh4h)%uaSPZZcsFvrA)c^8esIT|Uc@Aa6^N zPpikYLw&Ds@1>elL#akx+S2U;^gkmDKhI;WCy6w$y5H~_B(1wiT4)_w3LB3l2<13Y zW+zjOoA6`l@bA?3Y&d&SGWBM zpD8$E)$o^wYt4bRtS5LNE!a8#0w*j^^H@p#8CeoTonw?zaI+nr^Jyu(6&Y`>ByMPA zLV6EP&wPGp;vv1`#@-`sqsMm*PMW+7#>+w*oD zr&?sSmKHhd+xT9Rj#|MG&i|@?c5u!7<>& zQoLk*i~I;NKJv5^a{fxcTI#C#P(v2cZP(Fdj8J#YZIeaokICO`*54gi@hO{WlvxVP zJmR+J4%(N#t7R*$svNdQ3vktR)G$~x+!NnFpN?ZbhGK+<%gr2<-ZBdrYdR1ik2UmY zSu9dy=*1K_05oqZH{>@^$jy??qAMfHsZ)Q*t2>mRs1h@w42;nbVWpnOSP7ORs@qc| z>yX~)OZUHbZYIKrq~^TTod`JsG&`W$$5}PvGjcQ%5G|E`NczZJPo-~UF=0b<{I0BL zd>bdXd#vG&h1pz@4H>s)IDAU!MpM{^{zklc#>)LdL7;SgLY^H5uk8M00#T$>Zdif8 zyR$Ghp(z#p(Y9gfx8K?6dbKrWnib>8F8Hh$w44q5b`1g=Z%}13Y5YE;)poS%t)(e_ zE!?PV(34e}|J5Ubonon=0;nFa7OLeY&BfHwlG#wvL#JevJaKfg6fADXF<}j;iZ0orj&n|Z^ z9f!rJGED}Lep zCHvfeK8cD@j0S>shvnM8_ul`CfV^+k;14AcgMjeTRnwXFjJm24DEsLt-r})cFrWy( z-}spOG+l780Je6}Iu0+;lh=#oARep2_$)AaDH@HnY5p6Ltw+AZiinip*Zvt-2N%It z6%+&1H1kj#M)n~t*)jAeN{LPE!K~a+Vm|M;U-*R*_o`7;HFWXcrRsK$*YEw6K*2*1 z2qA_I*@lr68kqe3dI;Y9)sW^*OOg_*z@8>C_C-am&*+lsaJl*9^gHo!6`V@Tfqc*V zRA&#w+%#LKYNSt)nsg>F465Jw*S6B1!%7A(pkq6NWDu7*WP^&HFmXp1On;PURn(Z7F`29^7d3M#L=$8efP5uq=FRSM-VB+k*b zFmAGgM|-yAgz$abg^M+Jvs)8t*N~qi;0kkwiXLgJ>y|L#_!!9sSt0Idw^ zZo6!U<#2W0l4DzwOajvlQNrenBMYwtqOx}fQaG;x5lz{TM6nHd9E`)COayU+a0rv{ z2PAV{SZv8`v5qmClQdLvvCC^C#nFrh4TQ2wI}o%Gz1oo=G*ainb7%Z=DQ5auCTOpM ze_H!(EA_NT-=34854+C9lTCAX8gwUTDN{Wz5_?&AVi z#y`z~VB5@vGZAW2+)UaPtyafzDTYZ$CYPzAu&8KKWu+TU?1imEzKA0Fn~|>5sDo)y zHqWRsFB!7#0F6cykbFOvP;zf0a(I8a3OZ~N?i2N`=?d|;1mh8?9PpMGJCET8L(xt? zktRuEU?o_V%(lcd;eYV%zhJ5TDpz9;=kjSfcEK^^$12n~eUE0H_L~}+_lHp@Zjd2b z{~Uo|U(r3!QzR?xC0WsPR?WHYdA|gDWh1JPN$uydk`kWnC5#u?7AkQ z|C_NQt&~CI)~G|`qHR}D7|LW%aj{S%Q-=fs%QveK_6SEU>#;7U2(){Sr;&QZi10u0 zo_pF6d>s_``3PQIemmrh8t>%r2jO?bLY=Q~6Y}9>c@te01MwaMNr`Yk1_w@Lv@ZaB zM^G1saGHoR`{Bu*gVsHPwkVtW3PTOl@PkX7PdBgzo&yE%VFwc%<>~%dGp-;c(E1?( zrzWFBWGbMe+_Os!S0wFe+`^SEM5O#{9Tg?aJixU+KKS$7;Zyho8gClrJBCf!`NhxA zAU!WF<63Q;6YY)__N-q^rujjJHiVP$82=aak2XG4f~f&{Pq+A z!YxnvJgK^5ArWk0@;KwGw6|a9-z(9BoYr+TGu;+xow>AnS}jJeI+ow#5pLxL zFubj)(dtQI60Z)>K)I^?Vn!MV-b7wD5vI>iUZ1WF+45k*ybqL-4gKu6%~d(lkr>)B z@axHZ_C67|Hg4od^}fjDuZf{Z^Wk?B-U=11lFX_SWN&SLc7>mkMTcsSk`{6AJy=cL zgV-s46F}cbRY;Oy{bt`82_BU8uH3Vl9!J5Tf`^6JAMi;;nFdGmCcFSxI^sCdG7zPD zWjw$10R%B_45jPMZCopKDVMHN;7G)os&o`9=dRlOvN0=WhL|p;6o|h7O1paHOn1Ah!2%;YKsop|?tMqUw%?A%L3 zvLJ@7^z9NeEb!fnqW+*}nH;d3w(8lDy}By)yW+8Ga?ZS@_1GqBa~XxxK1wae<#+Rw zJq^zlO`$*xMZ$nwTXqlX0GWc8`fO!>IugcC&T8w)L*s*}_R=_+<{e>=pz=A}EhqEt znr^wJi3t`cR-j4(oS=i%I%qH3KE_^p`iBQPSJyyLVa$onIzd#D!467GJ1I@(R=0St zg!F~ZOrix;?YtM^k?H-JsV>Wg@nfr=yk)9E_10|41Wx0C-f|h9Ybz_Mb7ZE?fj&`-;u0Ivs)dnm;OZdk z0bSk0ctpB*#781r$z#ZW(ZPr6dlcWa9mLshkv9Pn+o{dM6y6n|vhv0x-Q}%h9EU0y zMjw722)EEQbB|(^{S-kc&WrQ~04(3R8}?{EWww?%&uR)}mXk)QD~UD0J)!CHd|@3{yD zM`8BS_&b}rQ2mX@IN(QhUM4b$bar`lF*=^vD&OVpYL1t`_qeAagI1-ntNtDtuA~Uo z&1CM(Z#({qlYn3nH`x0@p8KtJGgF@Zdud8F`h@4sXq5IJY|L$$AZyN6`;p4OJS2x2 zKU|Jk^?q~Uuq?0G;p_T3TwxioWL&7oX4{tMB&JAuL4yX7&AASXKYsaJfZ(y%6?5dX zja5m!SefpU#V*aU^NjF}V{+&zjWQn8ss5i|c>w>!(qSBu5P$@+vkU@wf|&vd!6k&) z6`8%{3-K&6O0y^oa~Q=L4geS?j&{{v?z`Wa1QbH}&7-i3kx|GMU{q1`Due96Y4UkV z069GN{JNL|0bwB!J2jD6B@&xFn4DbtuDI?l>4vGZ_ z*|%zMF++AvU{t&8mlapC?2N?|fU|Fgn(U_CI_XeBm(i%OGzoFy&5OI=X80dT7y%QL zR&-R|h>&(6G9n^dg`h9S9~G~}g%yQ7*^=;D-3HIK7?cJz4K%fv`E&A6MGJogZ@#$; z4EvV}{G%xFbxy$m@c&U1z#*ohY6^39`EQH@_D3el#FL!vIBjP%La&-J-wCrobaH1v z2f_4RF@tcMI@$*lV%I@>bV-i4xcPZ^4?u1hh%hUy{GG($I&NX%?FW)aiyIKQ8!mN* zq~J&>8o#ixFf9!Jn~V*?yMaa#8Rc&}jId<@J`KYL-T-61os?D*1#j-dpv}Jc=Qisw zIf^Sg+ZGx)ImyEBn16=zaZ97{L##?3J#LW9b#T^s+zPD2j_=(+wuBCF#gx&M2v-B3 zCSYw%Z#{H(dgIl2g{zc6$$u55gZ-oKEAjas^79|+^DpyBh82-F4$kdfUj3K*z_glO z84Xu&9%9Zq2V^YvnEL2W^M`K)6t$Y`KZ|i!Rqy#zj7C(2Ro9ilcc9ZyvjSE}nX{_v zdK6BEtf3w()ktY@#n$4if4LL}#JasF$u%DbbhM;coJzR#Ng-sQf<@t)<4+ngeC%wK zVQGf9S2gt`*kvjxyL;dDQI&;%gcn^*1xS+@k!INHGTvli0GmJ!aKADEreYqD<4WKJ z2VC$&wBR;YesI(*Ep90}tNLyMS+rnt(oi#`lMs-SX4 z?Y+mPBGM6uej(HuP(1V}_LAddZ{Jvwx63Ev9HR9bZEStSPLW1gfZoH4KNR0e-g3Zl zsyfuEQiPhAJ%cgI!Ez=w2Q$O%nb1Ig57*$dHv_%t6UMc2X*ugE+^F!(rFCR%2$EQ2 zW`{kN1c4I!P}$(*P?>7u%%DJ>K}r*n&Xasf%mb68mJ1F%MrcGKJq<-Ex9Ez~h~C*i zFiFa<>P=xv#rzb6a9`;*p(G+_=P4CDU!OC|EfPX+AhKvh#Qt6hWKg=KxTr4No=ox0 zK(9~qpQNOVXgd^fF0vgr7tD)~15TktSsEWl=eX0ivSIV{q(l>A zX7clkaK|rz#isNZK$R<#EUQS9JxS2u2wsDmigxK6^6>>k?ajj%0C9yb+4B~wtXh?( zw@IVeJ+34({Av)5q)my{9AT(Ft0YSZp|2|~|KZMVG#hN|^wXv5Uvob_Xi$T*frxZ6 zsLh+QjD@+fo$5`2y(g^3T0fP|PB6LIM8SX`yNLlK96F!5fm4w4X+248Nk_Cwa~d4U z*|5*dht4iPX~NQ(Xl4!69hn;>pA8=@=eZMv74;jR0%ijyORJp?7qxcO5oMH>=Et0w zcJ_qyjD;Q&z6B$dT7(>N9oSKlo9{BMqA~}%xMmC<;@R7+!}M3)Dm@<|!#$0uhdmlJ z>g@zeXTVgtAF$cfh~9{9kZbml ztMtf$njqi;#HrSynirK9hQYUjygCGKnNCdb`Pu!LbinIlo zzVBWzE2PFomg-he9OqvKdc(m+GL8igD?sH8RXwe_a+n;vS}y=}lFpxhqhyp$4G|cO zW+YNo*pWs|$Yb=5qrru3Y0WifB-xfCs?KXobC1LRkcP}VBh#dI8Z&0UFlPotI~6oX z0(x{FjEScx8!LbL4f%{Z=?Hi}k)l8Wi1sZyJOH?JtPQo&Smx{(O${y_R1GXx&HZwJ%M?B^uu%%b)n2MrgROAqK`N8^5R@F~NYA!ivtZd3?X6>r%C{1sPLAb2o5w?6*TEccyC zVs2Wqs4d8BYgT_UZz?cVrd9g}|C>(hWgYtQM>M~fRDT6j74a<1$9Sm)mJ1-j>z6=bsuzH$WT=wIrko|_QpN)>->m{2 z#aoP4O}0OaG6;Azei^w2BAh=fmnaB6)QhMDC5%R&WqbK2b~;fG?6flMc0iOw*nc4O zV&#RNM`ax4D2UgCD1UH0WH5HHE|%oP%2k#)WJ%hFlecVFeRg{;Gh(IM8c*l!k({HM zE-vg-prJ|2H!1lH4)2_Tsq#9vTCA!H=ooed9d(+gv+qK=Ecz;(QloE4ICLtgcU}My zVrNl5@&hBQ-7cgkgjFn8+8AXK`hf$h)|dy9Zg{HR)4YF&5DV%HR+5%ZKh<+=8OUqM z2dM(6Sw_gAnDST{X!y2@7*7*Htq$ABqBe+RI#PD;3c{r41WVA8?P@Ras zWp693i*e>u;lXS(Dz^DKBEYvOpSftXVNvC#I}@;)ZXN-Y3~0# zawDSghCh!iHT32YDb2+h{Jsol-~>E?boD6aEHW2mQaQ^qNWk0a3~jp2{?da)BkocS z&)$X+d8us@2B*RVM>5*pSq=!&yG`D`5zNeI6tTBl;VwQ7hmAF1QnORYjk@y7xxzOp zu4#S8%*!c@tYUq-^Zf0HqrbS-Y@v{Z?7Ek$AT|2w-ICVcfXFVBmhBk321ULe1=YR^VMnMnJ zLDXivi`JLZ-`-BDE5V5D?m8X`jw2oL=w*Bo=EDclqt9bcjfLp%`&HY~l*dL`bD^tY zSn&i#YY4b1yD6>HX|<~fFMv)3A4RxB8^(SviFOzqBYIO$eg$SgbZbI1zlg}-apx>k z=f_H1JhN&NncNqE#A%CIX39mm@UD$&Tz_Q7H_+?ptFqdhVD8L|(~~(?N6ff$HqDE7 zR5>4!DzN4eV65^xlNwL+@LG>4Tc*W{JYkYir^uRy1HUGi$n5(-A>9`cFYsoAS)Qpd zb9NzD{Atfpz93m6q)x!nJ*^RrPT~OtjAn21!@;BBGY1h<`JhG{6^Dwo!Jj-UvaqY; zoT4xyzZI77^qg1~rQ41i%WfIdZW$Js`QY?QeZ|Taf7iLbd6wtKmqLzdtyi zL97dC74T|KX>!#Zu6kK4aOvB^1e(iw`GHssQ>GnffKv(#FDSj=nh?}5r)KLA z#66kCYzZ!v8wwB65Tvhb6G9dUZTstb1YO*phEWL0hlkso;u(=Ck@10+1*xJA#A<1& zqAJ`>H?iO8E*d9L$hp--)N_HB!!@Hx-^na1~IzIc?}}3whr#=U#iz&K)dC zzoW{yb;{)hVEMi6aR{CfYCv`k`J{g9K|XA1A|I+T*r+js-^Al6WnNi)UMZk2C+hf+ zCY|@ddfGEu4V7f$#nGpKfOYSt)kkiw(FMBJbn2t*Is2_L_d6R8x%h`9KMGJy@rzJy zU$fX{`@tSCSM1xIg@B?W`V3*bXv#7pe;_dntWwkPU6vgB)bL3@a!w=1L2G3+367Ie ze(y3WkhDwQk=5~dXk%=$4Es{?mSnUs=H;?DYctLTnRB*x70suY`k%|d6TGXWp{ETV z$~;HHKnf{vmWd%1{M}GZ)J%s@9YkTRmaa3%ibIz!h*N|->_|00N6@e3Z2$JkNzgI@ zi}PC!w|9zK7}DjMsSgufIO?Ac-VEhk;RIQ+_(X9yEh|ChYC{bmQ<^PXjK6Bg?5tMt zURA3dq9up?aMbE%*oI$D6453R56=|q$q3vQYKyQ+2Bwu6-CRfpNsD5ZE1w5gYw^zn zX-p6|>ET|C9%(U8>Xrs~`cbIiDB^rrB)T~0J}m#>1}zj8_a||@m)2-&9=F2uLu~{J z8DbCrrw;g(eJ{RF+uI9zC^F+OFV}GJ;t}l4@GRc6k~WgOepH*+wSY^ZTH+ndbTQ-k;YmJEk1a?iAfSBx=S$)8mlP*3gSP-HYP|>#!gY>7i6)B$ppvT z_fHeArRKC;&=y(vy3rJZWL)gg7)eY85>*+%tei;YJX^lz-*|aCOGQ;vYY#%^o)JK} za1&K|JW1u|a&Sq01k3IWpL8E zmlFc(q+`QPN$*t|=jC3PLPAMDeAL^WXGQrPaItlOf*Jq)8GwK^taxo^22NE02TU=WeoM%k1x+eov-t;^d z?~9#_8|W1RZMQ2gvBJJK`0QC#(T;E3ap3a{NisGTUki{JILLSy;mG~TlKxn%T&r7? z;^q?3a_))x$MQQH*d-0aX#N2IdP{QcqMh8Cl-1zKPzH|-D@vxrzI@wxqji5#oSf-X z{0R3c5-k?H>iH;$>K6L8jJ}Fd9|QLqH&`*I2sJyH66|84N9nU@?9o`oAv|CshyATc zpBKC4P;>EtWTKNli;nsI2m zBppZ#J^TlHdfs{X4;R|f#yVt1svhdp?b+#^l$#hUijkIB`*w==iPcr>&>S>;)4*Nn zjP6nVjaGeFexDJG%AN$#{HUPQc49e@==$wRA!G@p9aP=#!i^O|Bw&|M$+)*lR^oJ> zg#BqtG}!787m+El4t8^BX18Sj*ltH(y?@=Tge)5#ZmLpyr4rt;J7f7N;xZ=2-BL6l zYN9Il(-1F6FX1f&GA%>~4m}H`G;Xb9{E-_~zIX-eaBcM!MNS$aI??=7q>ZlV8?mh*|M*V<+QAEPFvWf15 zB3L^p*pV{U=NgVwj_AeYkzIJ}?(k|RzDy>hPjEPz%!nV+9w3LTpV^|eZBk1GskRY2 VrGT(|g4)pnBc!xBpXFZG{ufO%d{Y1b literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/images/ui-colorpicker.png b/public/javascripts/jqplot/examples/images/ui-colorpicker.png new file mode 100644 index 0000000000000000000000000000000000000000..e244c689ebe88d938e89e9c39234debee87155da GIT binary patch literal 494 zcwPbS0TKR*P)uJ3|JkpZKt2f0_1>B8UAzk*LrsvW-|w#t9LM=i;QKzqOSCMDT-Uuo zkummb0H}e}YPD!E7*M<2mUn1btya69PN%nKy#E}eYBU-*tXM3b=W@B@U4AAphkInj k12|Bt+U6kg>PvtD0M + + + + + jqPlot Sample Charts + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcwXxa@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcwXxa@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcwXxa@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcwXxa@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcwXxa@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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�#<2qqt zy3eaEPTa?j%AGf$AJiwFp4+V{#^VZyG`3anX^!=X6?wsRz?@R4cxLaSE98h#xZqyK zt0~xb@yg($Js%;o6bDG`xftM`XZF5S6ucp30rnTLD9xsnsXck`C_+s(UW% z&ZpY@l0z}^95ki;iCLCM^0H`X(Qr(Hz3v%7NnmriXu2s&>xsbN#*R3*wsZhRj4kkL zn0CuAqq}Z5eWNWG_3=^bTb1f!g?@q%FH;CtWeUmyFif?cn!OR0ee zqkO}6-YzVG=K}+Q6x8aL-^od|0$V+=CPTvz+G;52w`psJ_dk3gO0@Ls#+JK*(2Vo0( zt5XGAY{~h?$eCbWO(6dwAHjAq@MyXVh|`TJ25T90FY+6eLj4Y2B9w6-tsEiGL`N#7 zV^YVcSQ2%I)N(@(B`sQ|15H(AIyD8Hkd>9ap~kgFTX>7N7Ty@07_6T#CWBj7V(~83 zdmB8ulj`{*f%y85R|9*rR>;s>nwjh0Mp3x1x>R9exrYKrBpbT)O$EQLh?M-#lU>?m9~tV;9)N#?N<3y9TIX})&W=K z)jJspY>J7WiE;BT;Zx45q3ImA-cB%NTzqTB6@vMPe^$K93re~dLAY;Vx(N7kM*Dkw zNIo{C%syJ$Rd&19sf8EDMOF+g-5yES@Rx6Z^DpdP5pU!yJM3c1?HLfCzT>y_>7J`4 z1L%~r+oRxK+Q-zmP-C*dLMiJ;#L+!PA7UpM_tgEc^t zgALg5=93`J&Xa7xnsLG)Y{Y?P<9koYVEm;Book{2z11mX56Y=S-Hr&a4{HS-17uo( zLhIOG*73dn#p+ErF%?$?-rp&@JQ9^sGw97~O;AL`eKn5xtRF#(YrJ`#lCWxjtnC5P z^0tBheBi_)JbFTKMg$)!_HX;|rS1fJgh`|mR1Uvo-QgG8V^4M zQ2-x|s?Eg1oAXJ%$T?gXH$$hjax!=$^N=gG6zw>b0S$ox85LiXWVa8(ZIO0a+$iG{ z8b=2aubh3A(il$xi$Jj}J1MzQZaD2wYeES3X<=78vOx;n$S>)8>w-rRTWO~hXxUle zB&4yq^&=@tTVnQ-z3r4_;iO*o%GPdJvmhku&W>$!(viCfWQL&m z=PyYpN7URr>@X}rgrE<|qw~C+oS-b;GcUATSt zLgQ3Bq)JLJtAC!>c8lXioH<6GD{1^Ti`J==3SL*&L{`vU$H6{r2a9CZaC-Y&3=%{>oT7p) kd7W6heYSHS*Z$fu>6;IfkTwjq{rAVi@+``{$_yRzfA;|)D*ylh literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..6d02426c114be4b57aabc0a80b8a63d9e56b9eb6 GIT binary patch literal 4369 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d GIT binary patch literal 4369 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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css new file mode 100644 index 0000000..0f1a7e7 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.css @@ -0,0 +1,568 @@ +/* + * jQuery UI CSS Framework 1.8.16 + * + * 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/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:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.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.16 + * + * 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/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.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 #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.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: #555555; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; 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 #999999; 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 { color: #212121; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff 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-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.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; } + +/* 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_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); } + +/* 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: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* + * jQuery UI Resizable 1.8.16 + * + * 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/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; 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 Selectable 1.8.16 + * + * 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/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.16 + * + * 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/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.16 + * + * 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/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.16 + * + * Copyright 2010, 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/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.16 + * + * 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/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.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; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.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-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.16 + * + * 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/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.16 + * + * 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/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; }/* + * jQuery UI Tabs 1.8.16 + * + * 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/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.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: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; 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-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.16 + * + * 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/Datepicker#theming + */ +.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: bold; 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 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 .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.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 { border-left-width:0; } +.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:0em; } + +/* RTL support */ +.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 { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.16 + * + * 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/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css new file mode 100644 index 0000000..08821f5 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/css/smoothness/jquery-ui.min.css @@ -0,0 +1 @@ +.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:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.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{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-widget :active{outline: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-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_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-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{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{-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;}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;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:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;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 black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0!important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible;}.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:1.4;}.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-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;}button.ui-button::-moz-focus-inner{border:0;padding:0;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.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;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.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:1px;margin:0 .2em 1px 0;border-bottom:0!important;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-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none!important;}.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:bold;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 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 .6em;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{border-left-width:0;}.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{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px;}.ui-progressbar{height:2em;text-align:left;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;} \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcwXxa@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 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcwPbf00jSuP)bvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQj@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcwXxa@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 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcwXxa@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~` zFlmZ}YMcJY=eo?o%*@I?2`NblNeKxcBE>D$@NjCPP!GpZ0cN&4#*2?=7{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 zcwVhmYgiK4)~3@mooTw9nMM;$eWu2m#PU%G&Ac7QOv^6gctJ3vM8!lUG!aCxuV%(k zNi$PJQ&LJz0Y?x^5jisjc>}@=3SKC$c~1}w6*=0OALo1K`}zIZd+p2GYrSjlwcefi z!$qGxyG(Zh0DwJbeNX=g0Bl>{lq3HB>1KQV)gNg9z+S@H)1HC&hx4VOIcD51{@Gry z&A;=BuZ*(e8)$HA_?sgRT^YmJOHF05+7K`5c9X+-n(!t6d(BoWb%yoX=*@H9KPBk; zwrvXkO8WNQW@q+K&z%6k0ASat&8bg+c)hvgc=Og?0N}T6U)=xzZti*XXgdH93)o=} z09@Jr|Ecmunx6E@7Bb*S`Csyws(185N*Ss%gpfJy?l z*r7=cysM0}XbF_CGI?J8#Z`f6DM)s*;RBEJR^F>P?$T#M)6;dunGQ(hsb>yo;mk9! z6_8d%n`n1gV{6*7j-7(ET!yW^?x>n{sJY~CuAcPFnKGylhNYtC&6}wH74X7m;V*z) zVPjuz38;+Z|BA*^q z54%`v7kPu(1(#{hkFebBQ$R8t_-G%2t|%3BBhr2uN|JfAK-#9tqWWhkOvpQCR+50? zIMx~Cr&#xYO+?3~8cKE@dYZW45uTMA5gUVRc;E`PEj)L^RjhtJC?SD8>^IIG1QIR@ zvsUo&@+H+VJ=FOwT07Icl)$(Hg7wH&YZlCHC)-fpB~whIgcL!?g#d-*6pVl5=zOHM z$3~XYyBn8M2qVGZuH*l|R*hr%h$RSL@y&Iqo` zyH^=W{}3R)hN1miE3m;UwO}QXDl6{Yh*^TF!ZsX`?DYtw^aj1@{TvM0-Vo|uGiE~5 z)TJBLFVF4R^b&O|cj#j_KH*47>pdq|psXK{tbzvZ9Us$|>*PJ*WMMG}E$@j9MP{qs zO&l}59jWv(^NV6WQTi%Xk<+2G-=jN8Z|+m}$t~u$i*i<4nn|uysfm5P_Xd~}jlts> zC*Al3yjp!e7N#oP)A?*ll4VDmEp?K%L{0u~RupBcLJ1xc;syD@+yk^{9u-*c)nKv= zZ@)HhFT3C1gzyDEsSuU)Q78fPgd{qUPq91G zXwL%bC{vW}GIXt0LVnt8>&DGnls_ceOJPl;FY@c&L9|{G+|4&_7c>f6YWdRVMrEMZ z2P~mHU^dFp`TvQ<|0-rD_37`Xlv0;6rzdg0k}jNSglakHZNc1MP(7xS|2aTCaJ!(0 zCNfQr=w~se3H;AY{M(7by25mjWnQaMenYvwFI+23dBi{+KZE8`lX&2KPPyQlS7sc7 zdkeT`eleO3b2W8HEWP^ka4pdh<^`l{E?|6Xn0qM$&@|w+F zC(P%~Wf9=@Ojeu&wrf0Iqo^}xa}y98YMy8Sdi8J&RRoPfNFL@o5N%89I)KKd$IJL# z(341?MjcLXh}$zmmI?7Z!3_*1u4_F!s9;IPG`BgrS_H<~sP%rwx`Bqtx~uN_Qf0Fk5@)u{TL6RXkk|Wo+SjJ1kS&~eBjr-cnv1wVMpbe44Yj5B$>dfgL2KGuo~;k?hW0#m zry3aoUk;%D3r(`7S*JBKAh1>Q`;_7I7@on?I2JJK)f&esZc=M7c z*GIqa$OvhEe~_FPa+$`N97^mfP9r3fsV6?meP_WuI{AB$BLIJb>^0Q9)@~pTn|!F9;6UMQ$%XKrzXH=jL}}92+hTWSzs)2RX#EaikX?)J3I;i z@EzLgDuP>C&8ucBwKsz0qSea3F>X^yJGMyX)pGLnP0o39?Tz_IE_%QBBh6Y&9#5mm z4f34T{Of19_nqhP_I-o9Bk8jA5C^2om_ydrSrS&$A!e4rSH>FNrDfY24R@^vPen|? zoCjkWt;Q%BCaMlzPZNymT8P6`y`^1X;tzMmVupfSUa5^pj3f+05G%GOo?!zS*U)Kj z=T~f$vWvj#NZw)Pq)oO-8LhXX))TyiJdGekr_DY*;68II@h3t(C4|~3(UoPE|7cbLo)U>7MYBf#b8bZ-rqeVs>-*Vf|0||HrT7JqNs%?|+7Az(c?F5u<+k=P`eFq+@%x z)bSY~D@5+^;H?^QN#eK2(2SQZK%0DDvBu=oCASwo!s`S1=@5miOgW7z(AU5*=2UeF zl<3c_STZNI5O_%2AgzjhS9Afla0np{;}&}WtF$en{XKWe&>OWW$rJ4=2&WY2_c%bx z`#f&051)dW_YbP9R*q#?v zv;l%9$#EbOXr$(HlxtWkozU5K%?^e=-O93yQpM(NmV(^WgLi^L4;KuDV13Qw;IMih zB=g?V+v(_Zi8e}Xfe}S(4T^mm%UHr zU0xnyA@6`@B{MziLHz}ei_#Aj1J;QT%x9O@V`8Q1j#I@VP9;Vs>3U{`oWCYX{{}T3 zHN|HAQnS`JldZa2Pt(;ctn3~!X&Ly=tac^N>eHwD<#~zUl?=v`>>X1>JKzianLTTL zFY01!?@`)2QJ@(%);kT9)r{&_kIA3cR-@ynPpkb(jl751)11gnxoJSsqU1v> z%fM>2*K)M*?B+g*D9*7F?On?KZ;DZ-ccwM0AP_EPmY8{N_Yvo1+6J3E8K8JqfymEa zf+7U@_QkDMN8`@Hj|YqDCNAYbR`XJdFZf*&9+}`YaS~!Rq4)&Y#g-6`vnu>ISy4mW zL?F9dP^HtTMj4(Ul8E{wpRylw0TMxP^qq>%6&qv7a&WbvWSDm zqK^LZ>p=(X864XYY;G%Ti?YH=5E025H62k~SIj-XyFgPQ-^nH&rh@bllaV+o{k`S< za8~Y|>GFC?F3lZOI0H@A(5uJeh4HvWNf~!!EXxq1Bva>f4*AO1H1=Sk!P#$dzI!DI zH5Zh|%&G4%GFX1WUB<3ExkJ`dus+D{(Wc_tP&0YR!owWEQd5{a7WBBmNeXagLX zAflS~^ko1v86>`4&{U&vqe|Pc98IzU`$FiyLF*0DCHk)u zVnTE06xEb_%?qeX20twk>7D+8#b#WJhR~G#Bc>jX#dayAy4rs*Ch6Ei$h4!R1(^ z8DEYWtwAOwY;%U&Ea9tAuexPQ=F85a&M@g_{ d|GeK{$Y5lo%PMu^>wln`44$rjF6*2UngE4^EGqy2 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/public/javascripts/jqplot/examples/jquery-ui/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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 literal 0 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/public/javascripts/jqplot/examples/jquery-ui/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 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/public/javascripts/jqplot/examples/jquery-ui/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 HcwPel00001 diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css new file mode 100644 index 0000000..cd66d53 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.css @@ -0,0 +1,612 @@ +/* + * jQuery UI CSS Framework 1.9pre + * + * 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/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:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.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 Accordion 1.9pre + * + * 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/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-heading { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-heading { 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; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.9pre + * + * 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/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ +/* + * jQuery UI Button 1.9pre + * + * 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/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.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; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.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-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Datepicker 1.9pre + * + * 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/Datepicker#theming + */ +.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: bold; 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 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 .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.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 { border-left-width:0; } +.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:0em; } + +/* RTL support */ +.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 { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Dialog 1.9pre + * + * 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/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Menu 1.9pre + * + * 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/Menu#theming + */ +.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; } +.ui-menu .ui-menu { margin-top: -3px; position: absolute; } +.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; } +.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; } +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } + +.ui-menu li.ui-state-disabled { font-weight: normal; padding: .0em .4em; margin: .4em 0 .2em; line-height: 1.5; } + +/* icon support */ +.ui-menu-icons { position: relative; } +.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; } + +/* left-aligned */ +.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; } + +/* right-aligned */ +.ui-menu .ui-menu-icon { position: static; float: right; } +/* + * jQuery UI Menubar 1.9pre + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ +.ui-menubar { list-style: none; margin: 0; padding-left: 0; } + +.ui-menubar-item { float: left; } + +.ui-menubar .ui-button { float: left; font-weight: normal; border-top-width: 0 !important; border-bottom-width: 0 !important; margin: 0; outline: none; } +.ui-menubar .ui-menubar-link { border-right: 1px dashed transparent; border-left: 1px dashed transparent; } + +.ui-menubar .ui-menu { width: 200px; position: absolute; z-index: 9999; } +/* + * jQuery UI Progressbar 1.9pre + * + * 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/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* + * jQuery UI Resizable 1.9pre + * + * 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/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; 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 Selectable 1.9pre + * + * 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/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Slider 1.9pre + * + * 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/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; }/* + * jQuery UI Spinner 1.9pre + * + * 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/Spinner#theming + */ +.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; } +.ui-spinner-input { border: none; background: none; 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; z-index: 100; text-align: center; vertical-align: middle; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; } +.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */ +.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */ +.ui-spinner-up { top: 0; } +.ui-spinner-down { bottom: 0; } + +/* TR overrides */ +span.ui-spinner { background: none; } +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position:-65px -16px; +} +/* + * jQuery UI Tabs 1.9pre + * + * 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/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.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: 0 !important; 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.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +/* + * jQuery UI Tooltip 1.9pre + * + * 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/Tooltip#theming + */ +.ui-tooltip { + padding:8px; + position:absolute; + z-index:9999; + -o-box-shadow: 0 0 5px #aaa; + -moz-box-shadow: 0 0 5px #aaa; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +/* Fades and background-images don't work well together in IE6, drop the image */ +* html .ui-tooltip { + background-image: none; +} +body .ui-tooltip { border-width:2px; } +/* + * jQuery UI CSS Framework 1.9pre + * + * 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/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.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/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; 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 #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; 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 #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.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)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* 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-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 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/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css new file mode 100644 index 0000000..56a9be1 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.9pre.min.css @@ -0,0 +1,10 @@ +/* + * jQuery UI CSS Framework 1.9pre + * + * 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/Theming/API + */ +.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:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-header-active{border-bottom:0!important;}.ui-accordion .ui-accordion-heading{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-heading{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;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible;}.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:1.4;}.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-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;}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:bold;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 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 .6em;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{border-left-width:0;}.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{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none;}.ui-menu .ui-menu{margin-top:-3px;position:absolute;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;zoom:1;font-weight:normal;}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-menu li.ui-state-disabled{font-weight:normal;padding:.0em .4em;margin:.4em 0 .2em;line-height:1.5;}.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-menubar{list-style:none;margin:0;padding-left:0;}.ui-menubar-item{float:left;}.ui-menubar .ui-button{float:left;font-weight:normal;border-top-width:0!important;border-bottom-width:0!important;margin:0;outline:none;}.ui-menubar .ui-menubar-link{border-right:1px dashed transparent;border-left:1px dashed transparent;}.ui-menubar .ui-menu{width:200px;position:absolute;z-index:9999;}.ui-progressbar{height:2em;text-align:left;overflow:hidden;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;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 black;}.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;}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle;}.ui-spinner-input{border:none;background:none;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;z-index:100;text-align:center;vertical-align:middle;position:absolute;cursor:default;display:block;overflow:hidden;right:0;}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none;}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0;}.ui-spinner-up{top:0;}.ui-spinner-down{bottom:0;}span.ui-spinner{background:none;}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.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:0!important;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.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:none;}.ui-tooltip{padding:8px;position:absolute;z-index:9999;-o-box-shadow:0 0 5px #aaa;-moz-box-shadow:0 0 5px #aaa;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa;}* html .ui-tooltip{background-image:none;}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{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-widget :active{outline: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-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_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-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{-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;}.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);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;} \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css new file mode 100644 index 0000000..5547c7b --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.css @@ -0,0 +1,568 @@ +/* + * jQuery UI CSS Framework 1.8.16 + * + * 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/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:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.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.16 + * + * 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/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; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.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; } +.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.16 + * + * 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/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; 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 Selectable 1.8.16 + * + * 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/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.16 + * + * 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/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.16 + * + * 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/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.16 + * + * Copyright 2010, 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/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.16 + * + * 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/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.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; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.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-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.16 + * + * 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/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.16 + * + * 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/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; }/* + * jQuery UI Tabs 1.8.16 + * + * 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/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.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: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; 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-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.16 + * + * 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/Datepicker#theming + */ +.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: bold; 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 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 .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.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 { border-left-width:0; } +.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:0em; } + +/* RTL support */ +.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 { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.16 + * + * 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/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css new file mode 100644 index 0000000..78f7d3d --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/css/ui-lightness/jquery-ui.min.css @@ -0,0 +1 @@ +.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:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.ui-helper-clearfix{display:inline-block;}/* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix{height:1%;}.ui-helper-clearfix{display:block;}/* end clearfix */ .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.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;}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333;}.ui-widget-content a{color:#333;}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:bold;}.ui-widget-header a{color:#fff;}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;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;}.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:#fff 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;}.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:#fff;}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff;}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff;}.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-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);}.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{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{-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;}.ui-widget-overlay{background:#666 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:#000 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;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;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 black;}.ui-accordion{width:100%;}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1;}.ui-accordion .ui-accordion-li-fix{display:inline;}.ui-accordion .ui-accordion-header-active{border-bottom:0!important;}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em;}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em;}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px;}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1;}.ui-accordion .ui-accordion-content-active{display:block;}.ui-autocomplete{position:absolute;cursor:default;}* html .ui-autocomplete{width:1px;}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left;}.ui-menu .ui-menu{margin-top:-3px;}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%;}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1;}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px;}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible;}.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:1.4;}.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-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;}button.ui-button::-moz-focus-inner{border:0;padding:0;}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden;}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative;}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0;}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1;}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em;}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.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;}.ui-tabs{position:relative;padding:.2em;zoom:1;}.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:1px;margin:0 .2em 1px 0;border-bottom:0!important;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-selected{margin-bottom:0;padding-bottom:1px;}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text;}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer;}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none;}.ui-tabs .ui-tabs-hide{display:none!important;}.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:bold;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 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 .6em;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{border-left-width:0;}.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{float:right;}.ui-datepicker-rtl .ui-datepicker-group{float:right;}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px;}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px;}.ui-progressbar{height:2em;text-align:left;}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;} \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js new file mode 100644 index 0000000..5ca2642 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui-1.9pre.min.js @@ -0,0 +1,473 @@ +/*! + * jQuery UI 1.9pre + * + * 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,g){function d(e,f){var i=e.nodeName.toLowerCase();if("area"===i){i=e.parentNode;var b=i.name;if(!e.href||!b||i.nodeName.toLowerCase()!=="map")return false;i=a("img[usemap=#"+b+"]")[0];return!!i&&c(i)}return(/input|select|textarea|button|object/.test(i)?!e.disabled:"a"==i?e.href||f:f)&&c(e)}function c(e){return!a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.9pre", +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({_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var i=this;setTimeout(function(){a(i).focus(); +f&&f.call(i)},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;e=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?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):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"))||!e.length?a(document):e},zIndex:function(e){if(e!==g)return this.css("zIndex",e);if(this.length){e=a(this[0]);for(var f;e.length&&e[0]!==document;){f=e.css("position");if(f==="absolute"||f==="relative"||f==="fixed"){f=parseInt(e.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}e=e.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", +function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(e,f){function i(l,j,m,n){a.each(b,function(){j-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(m)j-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(n)j-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return j}var b=f==="Width"?["Left","Right"]:["Top","Bottom"],h=f.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth, +outerHeight:a.fn.outerHeight};a.fn["inner"+f]=function(l){if(l===g)return k["inner"+f].call(this);return this.each(function(){a(this).css(h,i(this,l)+"px")})};a.fn["outer"+f]=function(l,j){if(typeof l!=="number")return k["outer"+f].call(this,l);return this.each(function(){a(this).css(h,i(this,l,true,j)+"px")})}});a.extend(a.expr[":"],{data:function(e,f,i){return!!a.data(e,i[3])},focusable:function(e){return d(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(e){var f=a.attr(e,"tabindex"),i=isNaN(f); +return(i||f>=0)&&d(e,!i)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart"in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(e,f,i){e=a.ui[e].prototype;for(var b in i){e.plugins[b]=e.plugins[b]||[];e.plugins[b].push([f,i[b]])}},call:function(e,f,i){if((f=e.plugins[f])&&e.element[0].parentNode)for(var b= +0;b0)return true;e[i]=1;b=e[i]>0;e[i]=0;return b},isOverAxis:function(e,f,i){return e>f&&e", +options:{disabled:false,create:null},_createWidget:function(e,f){f=a(f||this.defaultElement||this)[0];this.element=a(f);this.options=a.widget.extend({},this.options,this._getCreateOptions(),e);this.bindings=a();this.hoverable=a();this.focusable=a();if(f!==this){a.data(f,this.widgetName,this);this._bind({remove:"destroy"})}this._create();this._trigger("create");this._init()},_getCreateOptions:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy();this.element.unbind("."+this.widgetName).removeData(this.widgetName); +this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled");this.bindings.unbind("."+this.widgetName);this.hoverable.removeClass("ui-state-hover");this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(e,f){var i=e,b,h,k;if(arguments.length===0)return a.widget.extend({},this.options);if(typeof e==="string"){i={};b=e.split(".");e=b.shift();if(b.length){h=i[e]=a.widget.extend({}, +this.options[e]);for(k=0;k=9)&&!d.button)return this._mouseUp(d);if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,d)!==false)?this._mouseDrag(d):this._mouseUp(d);return!this._mouseStarted},_mouseUp:function(d){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName, +this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;d.target==this._mouseDownEvent.target&&a.data(d.target,this.widgetName+".preventClickEvent",true);this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +(function(a){a.widget("ui.draggable",a.ui.mouse,{version:"1.9pre",widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(g){var d= +this.options;if(this.helper||d.disabled||a(g.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(g);if(!this.handle)return false;a(d.iframeFix===true?"iframe":d.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 true},_mouseStart:function(g){var d=this.options;this.helper= +this._createHelper(g);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.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:g.pageX-this.offset.left,top:g.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); +this.originalPosition=this.position=this._generatePosition(g);this.originalPageX=g.pageX;this.originalPageY=g.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);d.containment&&this._setContainment();if(this._trigger("start",g)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,g);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(g,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,g);return true}, +_mouseDrag:function(g,d){this.position=this._generatePosition(g);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();if(this._trigger("drag",g,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,g);return false},_mouseStop:function(g){var d= +false;if(a.ui.ddmanager&&!this.options.dropBehaviour)d=a.ui.ddmanager.drop(this,g);if(this.dropped){d=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!d||this.options.revert=="valid"&&d||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)){var c=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",g)!== +false&&c._clear()})}else this._trigger("stop",g)!==false&&this._clear();return false},_mouseUp:function(g){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,g);return a.ui.mouse.prototype._mouseUp.call(this,g)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(g){var d=!this.options.handle||!a(this.options.handle,this.element).length? +true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==g.target)d=true});return d},_createHelper:function(g){var d=this.options;g=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[g])):d.helper=="clone"?this.element.clone().removeAttr("id"):this.element;g.parents("body").length||g.appendTo(d.appendTo=="parent"?this.element[0].parentNode:d.appendTo);g[0]!=this.element[0]&&!/(fixed|absolute)/.test(g.css("position"))&&g.css("position","absolute");return g}, +_adjustOffsetFromHelper:function(g){if(typeof g=="string")g=g.split(" ");if(a.isArray(g))g={left:+g[0],top:+g[1]||0};if("left"in g)this.offset.click.left=g.left+this.margins.left;if("right"in g)this.offset.click.left=this.helperProportions.width-g.right+this.margins.left;if("top"in g)this.offset.click.top=g.top+this.margins.top;if("bottom"in g)this.offset.click.top=this.helperProportions.height-g.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var g= +this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0])){g.left+=this.scrollParent.scrollLeft();g.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)g={top:0,left:0};return{top:g.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:g.left+(parseInt(this.offsetParent.css("borderLeftWidth"), +10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var g=this.element.position();return{top:g.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:g.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,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 g=this.options;if(g.containment=="parent")g.containment=this.helper[0].parentNode;if(g.containment=="document"||g.containment=="window")this.containment=[g.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,g.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, +(g.containment=="document"?0:a(window).scrollLeft())+a(g.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(g.containment=="document"?0:a(window).scrollTop())+(a(g.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(g.containment)&&g.containment.constructor!=Array){g=a(g.containment);var d=g[0];if(d){g.offset();var c=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),(c?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,(c?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=g}}else if(g.containment.constructor==Array)this.containment=g.containment},_convertPositionTo:function(g,d){if(!d)d=this.position;var c=g=="absolute"?1:-1,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(e[0].tagName);return{top:d.top+ +this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:e.scrollTop())*c),left:d.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:e.scrollLeft())*c)}},_generatePosition:function(g){var d=this.options,c=this.cssPosition=="absolute"&& +!(this.scrollParent[0]!=document&&a.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName),f=g.pageX,i=g.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(g.pageX-this.offset.click.leftb[2])f=b[2]+this.offset.click.left;if(g.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(d.grid){i=d.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.topb[3])?i:!(i-this.offset.click.topb[2])?f:!(f-this.offset.click.left=0;l--){var j=c.snapElements[l].left,m=j+c.snapElements[l].width,n=c.snapElements[l].top,o=n+c.snapElements[l].height;if(j-f=l&&i<=j||b>=l&&b<=j||ij)&&(e>=h&&e<=k||f>=h&&f<=k||ek);default:return false}}; +a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(g,d){var c=a.ui.ddmanager.droppables[g.options.scope]||[],e=d?d.type:null,f=(g.currentItem||g.element).find(":data(droppable)").andSelf(),i=0;a:for(;i').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=e.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var f=this.handles.split(",");this.handles={};for(var i=0;i');/sw|se|ne|nw/.test(b)&&h.css({zIndex:++e.zIndex});"se"==b&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(h)}}this._renderAxis=function(k){k=k||this.element;for(var l in this.handles){if(this.handles[l].constructor== +String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=a(this.handles[l],this.element),m=0;m=/sw|ne|nw|se|n|s/.test(l)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");k.css(j,m);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!c.resizing){if(this.className)var k=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);c.axis=k&&k[1]?k[1]:"se"}});if(e.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!e.disabled){a(this).removeClass("ui-resizable-autohide");c._handles.show()}},function(){if(!e.disabled)if(!c.resizing){a(this).addClass("ui-resizable-autohide");c._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); +var c=function(f){a(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){c(this.element);var e=this.element;e.after(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);c(this.originalElement);return this},_mouseCapture:function(c){var e= +false,f;for(f in this.handles)if(a(this.handles[f])[0]==c.target)e=true;return!this.options.disabled&&e},_mouseStart:function(c){var e=this.options,f=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:f.top,left:f.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"}); +this._renderProxy();f=g(this.helper.css("left"));var b=g(this.helper.css("top"));if(e.containment){f+=a(e.containment).scrollLeft()||0;b+=a(e.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:f,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:f,top:b};this.sizeDiff= +{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:c.pageX,top:c.pageY};this.aspectRatio=typeof e.aspectRatio=="number"?e.aspectRatio:this.originalSize.width/this.originalSize.height||1;e=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",e=="auto"?this.axis+"-resize":e);i.addClass("ui-resizable-resizing");this._propagate("start",c);return true},_mouseDrag:function(c){var e=this.helper,f=this.originalMousePosition,i=this._change[this.axis]; +if(!i)return false;f=i.apply(this,[c,c.pageX-f.left||0,c.pageY-f.top||0]);this._updateVirtualBoundaries(c.shiftKey);if(this._aspectRatio||c.shiftKey)f=this._updateRatio(f,c);f=this._respectSize(f,c);this._propagate("resize",c);e.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(f);this._trigger("resize",c,this.ui());return false}, +_mouseStop:function(c){this.resizing=false;var e=this.options;if(this._helper){var f=this._proportionallyResizeElements,i=f.length&&/textarea/i.test(f[0].nodeName);f=i&&a.ui.hasScroll(f[0],"left")?0:this.sizeDiff.height;i=i?0:this.sizeDiff.width;i={width:this.helper.width()-i,height:this.helper.height()-f};f=parseInt(this.element.css("left"),10)+(this.position.left-this.originalPosition.left)||null;var b=parseInt(this.element.css("top"),10)+(this.position.top-this.originalPosition.top)||null;e.animate|| +this.element.css(a.extend(i,{top:b,left:f}));this.helper.height(this.size.height);this.helper.width(this.size.width);this._helper&&!e.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",c);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(c){var e=this.options,f,i,b;e={minWidth:d(e.minWidth)?e.minWidth:0,maxWidth:d(e.maxWidth)?e.maxWidth:Infinity,minHeight:d(e.minHeight)?e.minHeight: +0,maxHeight:d(e.maxHeight)?e.maxHeight:Infinity};if(this._aspectRatio||c){c=e.minHeight*this.aspectRatio;i=e.minWidth/this.aspectRatio;f=e.maxHeight*this.aspectRatio;b=e.maxWidth/this.aspectRatio;if(c>e.minWidth)e.minWidth=c;if(i>e.minHeight)e.minHeight=i;if(fc.width,k=d(c.height)&&e.minHeight&&e.minHeight>c.height;if(h)c.width=e.minWidth;if(k)c.height=e.minHeight;if(i)c.width=e.maxWidth;if(b)c.height=e.maxHeight;var l=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,m=/sw|nw|w/.test(f);f=/nw|ne|n/.test(f);if(h&&m)c.left=l-e.minWidth;if(i&&m)c.left=l-e.maxWidth;if(k&&f)c.top=j-e.minHeight;if(b&&f)c.top=j-e.maxHeight;if((e=!c.width&&!c.height)&&!c.left&&c.top)c.top=null; +else if(e&&!c.top&&c.left)c.left=null;return c},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var c=this.helper||this.element,e=0;e');var e=a.browser.msie&&a.browser.version<7,f=e?1:0;e=e?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ +e,height:this.element.outerHeight()+e,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++c.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(c,e){return{width:this.originalSize.width+e}},w:function(c,e){return{left:this.originalPosition.left+e,width:this.originalSize.width-e}},n:function(c,e,f){return{top:this.originalPosition.top+f,height:this.originalSize.height-f}},s:function(c,e,f){return{height:this.originalSize.height+ +f}},se:function(c,e,f){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[c,e,f]))},sw:function(c,e,f){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[c,e,f]))},ne:function(c,e,f){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[c,e,f]))},nw:function(c,e,f){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[c,e,f]))}},_propagate:function(c,e){a.ui.plugin.call(this,c,[e,this.ui()]); +c!="resize"&&this._trigger(c,e,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.ui.plugin.add("resizable","alsoResize",{start:function(){var c=a(this).data("resizable").options,e=function(f){a(f).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),10),height:parseInt(i.height(),10), +left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof c.alsoResize=="object"&&!c.alsoResize.parentNode)if(c.alsoResize.length){c.alsoResize=c.alsoResize[0];e(c.alsoResize)}else a.each(c.alsoResize,function(f){e(f)});else e(c.alsoResize)},resize:function(c,e){var f=a(this).data("resizable"),i=f.options,b=f.originalSize,h=f.originalPosition,k={height:f.size.height-b.height||0,width:f.size.width-b.width||0,top:f.position.top-h.top||0,left:f.position.left- +h.left||0},l=function(j,m){a(j).each(function(){var n=a(this),o=a(this).data("resizable-alsoresize"),p={},q=m&&m.length?m:n.parents(e.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(q,function(u,s){var r=(o[s]||0)+(k[s]||0);if(r&&r>=0)p[s]=r||null});if(a.browser.opera&&/relative/.test(n.css("position"))){f._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(p)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?a.each(i.alsoResize, +function(j,m){l(j,m)}):l(i.alsoResize)},stop:function(){var c=a(this).data("resizable"),e=c.options,f=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(c._revertToRelativePosition){c._revertToRelativePosition=false;typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(i){f(i)}):f(e.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(c){var e=a(this).data("resizable"), +f=e.options,i=e._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),h=b&&a.ui.hasScroll(i[0],"left")?0:e.sizeDiff.height;b={width:e.size.width-(b?0:e.sizeDiff.width),height:e.size.height-h};h=parseInt(e.element.css("left"),10)+(e.position.left-e.originalPosition.left)||null;var k=parseInt(e.element.css("top"),10)+(e.position.top-e.originalPosition.top)||null;e.element.animate(a.extend(b,k&&h?{top:k,left:h}:{}),{duration:f.animateDuration,easing:f.animateEasing,step:function(){var l= +{width:parseInt(e.element.css("width"),10),height:parseInt(e.element.css("height"),10),top:parseInt(e.element.css("top"),10),left:parseInt(e.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});e._updateCache(l);e._propagate("resize",c)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var c=a(this).data("resizable"),e=c.element,f=c.options.containment;if(e=f instanceof a?f.get(0):/parent/.test(f)?e.parent().get(0):f){c.containerElement=a(e);if(/document/.test(f)|| +f==document){c.containerOffset={left:0,top:0};c.containerPosition={left:0,top:0};c.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(e),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,j){b[l]=g(i.css("padding"+j))});c.containerOffset=i.offset();c.containerPosition=i.position();c.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};f=c.containerOffset;var h=c.containerSize.height, +k=c.containerSize.width;k=a.ui.hasScroll(e,"left")?e.scrollWidth:k;h=a.ui.hasScroll(e)?e.scrollHeight:h;c.parentData={element:e,left:f.left,top:f.top,width:k,height:h}}}},resize:function(c){var e=a(this).data("resizable"),f=e.options,i=e.containerOffset,b=e.position;c=e._aspectRatio||c.shiftKey;var h={top:0,left:0},k=e.containerElement;if(k[0]!=document&&/static/.test(k.css("position")))h=i;if(b.left<(e._helper?i.left:0)){e.size.width+=e._helper?e.position.left-i.left:e.position.left-h.left;if(c)e.size.height= +e.size.width/f.aspectRatio;e.position.left=f.helper?i.left:0}if(b.top<(e._helper?i.top:0)){e.size.height+=e._helper?e.position.top-i.top:e.position.top;if(c)e.size.width=e.size.height*f.aspectRatio;e.position.top=e._helper?i.top:0}e.offset.left=e.parentData.left+e.position.left;e.offset.top=e.parentData.top+e.position.top;f=Math.abs((e._helper?e.offset.left-h.left:e.offset.left-h.left)+e.sizeDiff.width);i=Math.abs((e._helper?e.offset.top-h.top:e.offset.top-i.top)+e.sizeDiff.height);b=e.containerElement.get(0)== +e.element.parent().get(0);h=/relative|absolute/.test(e.containerElement.css("position"));if(b&&h)f-=e.parentData.left;if(f+e.size.width>=e.parentData.width){e.size.width=e.parentData.width-f;if(c)e.size.height=e.size.width/e.aspectRatio}if(i+e.size.height>=e.parentData.height){e.size.height=e.parentData.height-i;if(c)e.size.width=e.size.height*e.aspectRatio}},stop:function(){var c=a(this).data("resizable"),e=c.options,f=c.containerOffset,i=c.containerPosition,b=c.containerElement,h=a(c.helper),k= +h.offset(),l=h.outerWidth()-c.sizeDiff.width;h=h.outerHeight()-c.sizeDiff.height;c._helper&&!e.animate&&/relative/.test(b.css("position"))&&a(this).css({left:k.left-i.left-f.left,width:l,height:h});c._helper&&!e.animate&&/static/.test(b.css("position"))&&a(this).css({left:k.left-i.left-f.left,width:l,height:h})}});a.ui.plugin.add("resizable","ghost",{start:function(){var c=a(this).data("resizable"),e=c.options,f=c.size;c.ghost=c.originalElement.clone();c.ghost.css({opacity:0.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:"");c.ghost.appendTo(c.helper)},resize:function(){var c=a(this).data("resizable");c.ghost&&c.ghost.css({position:"relative",height:c.size.height,width:c.size.width})},stop:function(){var c=a(this).data("resizable");c.ghost&&c.helper&&c.helper.get(0).removeChild(c.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var c=a(this).data("resizable"),e=c.options, +f=c.size,i=c.originalSize,b=c.originalPosition,h=c.axis;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-i.width)/(e.grid[0]||1))*(e.grid[0]||1);e=Math.round((f.height-i.height)/(e.grid[1]||1))*(e.grid[1]||1);if(/^(se|s|e)$/.test(h)){c.size.width=i.width+k;c.size.height=i.height+e}else if(/^(ne)$/.test(h)){c.size.width=i.width+k;c.size.height=i.height+e;c.position.top=b.top-e}else{if(/^(sw)$/.test(h)){c.size.width=i.width+k;c.size.height=i.height+e}else{c.size.width= +i.width+k;c.size.height=i.height+e;c.position.top=b.top-e}c.position.left=b.left-k}}});var g=function(c){return parseInt(c,10)||0},d=function(c){return!isNaN(parseInt(c,10))}})(jQuery); +(function(a){a.widget("ui.selectable",a.ui.mouse,{version:"1.9pre",options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var g=this;this.element.addClass("ui-selectable");this.dragged=false;var d;this.refresh=function(){d=a(g.options.filter,g.element[0]);d.each(function(){var c=a(this),e=c.offset();a.data(this,"selectable-item",{element:this,$element:c,left:e.left,top:e.top,right:e.left+c.outerWidth(),bottom:e.top+c.outerHeight(),startselected:false, +selected:c.hasClass("ui-selected"),selecting:c.hasClass("ui-selecting"),unselecting:c.hasClass("ui-unselecting")})})};this.refresh();this.selectees=d.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(g){var d= +this;this.opos=[g.pageX,g.pageY];if(!this.options.disabled){var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",g);a(c.appendTo).append(this.helper);this.helper.css({left:g.clientX,top:g.clientY,width:0,height:0});c.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!g.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting= +true;d._trigger("unselecting",g,{unselecting:e.element})}});a(g.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){var f=!g.metaKey||!e.$element.hasClass("ui-selected");e.$element.removeClass(f?"ui-unselecting":"ui-selected").addClass(f?"ui-selecting":"ui-unselecting");e.unselecting=!f;e.selecting=f;(e.selected=f)?d._trigger("selecting",g,{selecting:e.element}):d._trigger("unselecting",g,{unselecting:e.element});return false}})}},_mouseDrag:function(g){var d=this; +this.dragged=true;if(!this.options.disabled){var c=this.options,e=this.opos[0],f=this.opos[1],i=g.pageX,b=g.pageY;if(e>i){var h=i;i=e;e=h}if(f>b){h=b;b=f;f=h}this.helper.css({left:e,top:f,width:i-e,height:b-f});this.selectees.each(function(){var k=a.data(this,"selectable-item");if(!(!k||k.element==d.element[0])){var l=false;if(c.tolerance=="touch")l=!(k.left>i||k.rightb||k.bottome&&k.rightf&&k.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var g=this.options;this.containerCache= +{};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?g.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled");this._mouseDestroy();for(var g=this.items.length-1;g>=0;g--)this.items[g].item.removeData(this.widgetName+"-item");return this},_setOption:function(g, +d){if(g==="disabled"){this.options[g]=d;this.widget().toggleClass("ui-sortable-disabled",!!d)}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(g,d){var c=this;if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(g);var e=null,f=this;a(g.target).parents().each(function(){if(a.data(this,c.widgetName+"-item")==f){e=a(this);return false}});if(a.data(g.target,c.widgetName+"-item")==f)e=a(g.target);if(!e)return false; +if(this.options.handle&&!d){var i=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==g.target)i=true});if(!i)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(g,d,c){d=this.options;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(g);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:g.pageX-this.offset.left,top:g.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(g);this.originalPageX=g.pageX;this.originalPageY=g.pageY;d.cursorAt&&this._adjustOffsetFromHelper(d.cursorAt);this.domPosition={prev:this.currentItem.prev()[0], +parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();d.containment&&this._setContainment();if(d.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",d.cursor)}if(d.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",d.opacity)}if(d.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex", +d.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",g,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",g,this._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!d.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,g);this.dragging=true;this.helper.addClass("ui-sortable-helper"); +this._mouseDrag(g);return true},_mouseDrag:function(g){this.position=this._generatePosition(g);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var d=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-g.pageY=0;d--){c=this.items[d];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!a.contains(this.placeholder[0],e)&&(this.options.type== +"semi-dynamic"?!a.contains(this.element[0],e):1)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(g,c);else break;this._trigger("change",g,this._uiHash());break}}this._contactContainers(g);a.ui.ddmanager&&a.ui.ddmanager.drag(this,g);this._trigger("sort",g,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(g,d){if(g){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,g);if(this.options.revert){var c= +this,e=c.placeholder.offset();c.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(g)})}else this._clear(g,d);return false}},cancel:function(){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 g=this.containers.length-1;g>=0;g--){this.containers[g]._trigger("deactivate",null,this._uiHash(this));if(this.containers[g].containerCache.over){this.containers[g]._trigger("out",null,this._uiHash(this));this.containers[g].containerCache.over=0}}}if(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:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(g){var d=this._getItemsAsjQuery(g&&g.connected),c=[];g=g||{};a(d).each(function(){var e=(a(g.item||this).attr(g.attribute||"id")||"").match(g.expression||/(.+)[-=_](.+)/);if(e)c.push((g.key||e[1]+"[]")+"="+ +(g.key&&g.expression?e[1]:e[2]))});!c.length&&g.key&&c.push(g.key+"=");return c.join("&")},toArray:function(g){var d=this._getItemsAsjQuery(g&&g.connected),c=[];g=g||{};d.each(function(){c.push(a(g.item||this).attr(g.attribute||"id")||"")});return c},_intersectsWith:function(g){var d=this.positionAbs.left,c=d+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,i=g.left,b=i+g.width,h=g.top,k=h+g.height,l=this.offset.click.top,j=this.offset.click.left;return this.options.tolerance== +"pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>g[this.floating?"width":"height"]?e+l>h&&e+li&&d+j0?"down":"up")},_getDragHorizontalDirection:function(){var g=this.positionAbs.left-this.lastPositionAbs.left;return g!=0&&(g>0?"right":"left")},refresh:function(g){this._refreshItems(g);this.refreshPositions();return this},_connectWith:function(){var g=this.options;return g.connectWith.constructor==String?[g.connectWith]: +g.connectWith},_getItemsAsjQuery:function(g){var d=[],c=[],e=this._connectWith();if(e&&g)for(g=e.length-1;g>=0;g--)for(var f=a(e[g]),i=f.length-1;i>=0;i--){var b=a.data(f[i],this.widgetName);if(b&&b!=this&&!b.options.disabled)c.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}c.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(g=c.length-1;g>=0;g--)c[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){for(var g=this.currentItem.find(":data("+this.widgetName+"-item)"),d=0;d=0;f--)for(var i=a(e[f]),b=i.length-1;b>=0;b--){var h=a.data(i[b],this.widgetName);if(h&&h!=this&&!h.options.disabled){c.push([a.isFunction(h.options.items)?h.options.items.call(h.element[0],g,{item:this.currentItem}):a(h.options.items,h.element),h]);this.containers.push(h)}}for(f=c.length-1;f>=0;f--){g=c[f][1];e=c[f][0];b=0;for(i=e.length;b< +i;b++){h=a(e[b]);h.data(this.widgetName+"-item",g);d.push({item:h,instance:g,width:0,height:0,left:0,top:0})}}},refreshPositions:function(g){if(this.offsetParent&&this.helper)this.offset.parent=this._getParentOffset();for(var d=this.items.length-1;d>=0;d--){var c=this.items[d];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?a(this.options.toleranceElement,c.item):c.item;if(!g){c.width=e.outerWidth();c.height=e.outerHeight()}e= +e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(d=this.containers.length-1;d>=0;d--){e=this.containers[d].element.offset();this.containers[d].containerCache.left=e.left;this.containers[d].containerCache.top=e.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}return this},_createPlaceholder:function(g){var d= +g||this,c=d.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=a(document.createElement(d.currentItem[0].nodeName)).addClass(e||d.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,i){if(!(e&&!c.forcePlaceholderSize)){i.height()||i.height(d.currentItem.innerHeight()-parseInt(d.currentItem.css("paddingTop")||0,10)-parseInt(d.currentItem.css("paddingBottom")|| +0,10));i.width()||i.width(d.currentItem.innerWidth()-parseInt(d.currentItem.css("paddingLeft")||0,10)-parseInt(d.currentItem.css("paddingRight")||0,10))}}}}d.placeholder=a(c.placeholder.element.call(d.element,d.currentItem));d.currentItem.after(d.placeholder);c.placeholder.update(d,d.placeholder)},_contactContainers:function(g){for(var d=null,c=null,e=this.containers.length-1;e>=0;e--)if(!a.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(d&& +a.contains(this.containers[e].element[0],d.element[0]))){d=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",g,this._uiHash(this));this.containers[e].containerCache.over=0}if(d)if(this.containers.length===1){this.containers[c]._trigger("over",g,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){d=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],i=this.items.length- +1;i>=0;i--)if(a.contains(this.containers[c].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[c].floating?"left":"top"];if(Math.abs(b-f) +this.containment[2])f=this.containment[2]+this.offset.click.left;if(g.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(d.grid){i=this.originalPageY+Math.round((i-this.originalPageY)/d.grid[1])*d.grid[1];i=this.containment?!(i-this.offset.click.topthis.containment[3])?i:!(i-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(a.contains(this.containers[e].element[0],this.currentItem[0])&&!d){c.push(function(f){return function(i){f._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(i){f._trigger("update", +i,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){d||c.push(function(f){return function(i){f._trigger("deactivate",i,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(i){f._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity", +this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!d){this._trigger("beforeStop",g,this._uiHash());for(e=0;e").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), +n={width:l.width(),height:l.height()},o=document.activeElement;l.wrap(m);if(l[0]===o||a.contains(l[0],o))a(o).focus();m=l.parent();if(l.css("position")==="static"){m.css({position:"relative"});l.css({position:"relative"})}else{a.extend(j,{position:l.css("position"),zIndex:l.css("z-index")});a.each(["top","left","bottom","right"],function(p,q){j[q]=l.css(q);if(isNaN(parseInt(j[q],10)))j[q]="auto"});l.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}l.css(n);return m.css(j).show()}, +removeWrapper:function(l){var j=document.activeElement;if(l.parent().is(".ui-effects-wrapper")){l.parent().replaceWith(l);if(l[0]===j||a.contains(l[0],j))a(j).focus()}return l},setTransition:function(l,j,m,n){n=n||{};a.each(j,function(o,p){var q=l.cssUnit(p);if(q[0]>0)n[p]=q[0]*m+q[1]});return n}});a.fn.extend({effect:function(){function l(q){function u(){a.isFunction(r)&&r.call(s[0]);a.isFunction(q)&&q()}var s=a(this),r=j.complete,t=j.mode;(s.is(":hidden")?t==="hide":t==="show")?u():o.call(s[0], +j,u)}var j=e.apply(this,arguments),m=j.mode,n=j.queue,o=a.effects.effect[j.effect],p=!o&&i&&a.effects[j.effect];if(a.fx.off||!(o||p))return m?this[m](j.duration,j.complete):this.each(function(){j.complete&&j.complete.call(this)});return o?n===false?this.each(l):this.queue(n||"fx",l):p.call(this,{options:j,duration:j.duration,callback:j.complete,mode:j.mode})},_show:a.fn.show,show:function(l){if(f(l))return this._show.apply(this,arguments);else{var j=e.apply(this,arguments);j.mode="show";return this.effect.call(this, +j)}},_hide:a.fn.hide,hide:function(l){if(f(l))return this._hide.apply(this,arguments);else{var j=e.apply(this,arguments);j.mode="hide";return this.effect.call(this,j)}},__toggle:a.fn.toggle,toggle:function(l){if(f(l)||typeof l==="boolean"||a.isFunction(l))return this.__toggle.apply(this,arguments);else{var j=e.apply(this,arguments);j.mode="toggle";return this.effect.call(this,j)}},cssUnit:function(l){var j=this.css(l),m=[];a.each(["em","px","%","pt"],function(n,o){if(j.indexOf(o)>0)m=[parseFloat(j), +o]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(l,j,m,n,o){return a.easing[a.easing.def](l,j,m,n,o)},easeInQuad:function(l,j,m,n,o){return n*(j/=o)*j+m},easeOutQuad:function(l,j,m,n,o){return-n*(j/=o)*(j-2)+m},easeInOutQuad:function(l,j,m,n,o){if((j/=o/2)<1)return n/2*j*j+m;return-n/2*(--j*(j-2)-1)+m},easeInCubic:function(l,j,m,n,o){return n*(j/=o)*j*j+m},easeOutCubic:function(l,j,m,n,o){return n*((j=j/o-1)*j*j+1)+m},easeInOutCubic:function(l,j, +m,n,o){if((j/=o/2)<1)return n/2*j*j*j+m;return n/2*((j-=2)*j*j+2)+m},easeInQuart:function(l,j,m,n,o){return n*(j/=o)*j*j*j+m},easeOutQuart:function(l,j,m,n,o){return-n*((j=j/o-1)*j*j*j-1)+m},easeInOutQuart:function(l,j,m,n,o){if((j/=o/2)<1)return n/2*j*j*j*j+m;return-n/2*((j-=2)*j*j*j-2)+m},easeInQuint:function(l,j,m,n,o){return n*(j/=o)*j*j*j*j+m},easeOutQuint:function(l,j,m,n,o){return n*((j=j/o-1)*j*j*j*j+1)+m},easeInOutQuint:function(l,j,m,n,o){if((j/=o/2)<1)return n/2*j*j*j*j*j+m;return n/2* +((j-=2)*j*j*j*j+2)+m},easeInSine:function(l,j,m,n,o){return-n*Math.cos(j/o*(Math.PI/2))+n+m},easeOutSine:function(l,j,m,n,o){return n*Math.sin(j/o*(Math.PI/2))+m},easeInOutSine:function(l,j,m,n,o){return-n/2*(Math.cos(Math.PI*j/o)-1)+m},easeInExpo:function(l,j,m,n,o){return j==0?m:n*Math.pow(2,10*(j/o-1))+m},easeOutExpo:function(l,j,m,n,o){return j==o?m+n:n*(-Math.pow(2,-10*j/o)+1)+m},easeInOutExpo:function(l,j,m,n,o){if(j==0)return m;if(j==o)return m+n;if((j/=o/2)<1)return n/2*Math.pow(2,10*(j-1))+ +m;return n/2*(-Math.pow(2,-10*--j)+2)+m},easeInCirc:function(l,j,m,n,o){return-n*(Math.sqrt(1-(j/=o)*j)-1)+m},easeOutCirc:function(l,j,m,n,o){return n*Math.sqrt(1-(j=j/o-1)*j)+m},easeInOutCirc:function(l,j,m,n,o){if((j/=o/2)<1)return-n/2*(Math.sqrt(1-j*j)-1)+m;return n/2*(Math.sqrt(1-(j-=2)*j)+1)+m},easeInElastic:function(l,j,m,n,o){l=1.70158;var p=o*0.3,q=n;if(j==0)return m;if((j/=o)==1)return m+n;if(q1&&q.splice.apply(q,[1,0].concat(q.splice(u,l+1)));c.dequeue()}})(jQuery); +(function(a){a.effects.effect.clip=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"hide")==="show",i=(g.direction||"vertical")==="vertical",b=i?"height":"width";i=i?"top":"left";var h={},k,l;a.effects.save(c,e);c.show();k=a.effects.createWrapper(c).css({overflow:"hidden"});k=c[0].tagName==="IMG"?k:c;l=k[b]();if(f){k.css(b,0);k.css(i,l/2)}h[b]=f?l:0;h[i]=f?0:l/2;k.animate(h,{queue:false,duration:g.duration,easing:g.easing,complete:function(){f|| +c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()}})}})(jQuery); +(function(a){a.effects.effect.drop=function(g,d){var c=a(this),e=["position","top","bottom","left","right","opacity","height","width"],f=a.effects.setMode(c,g.mode||"hide"),i=f==="show",b=g.direction||"left",h=b==="up"||b==="down"?"top":"left";b=b==="up"||b==="left"?"pos":"neg";var k={opacity:i?1:0},l;a.effects.save(c,e);c.show();a.effects.createWrapper(c);l=g.distance||c[h=="top"?"outerHeight":"outerWidth"]({margin:true})/2;if(i)c.css("opacity",0).css(h,b=="pos"?-l:l);k[h]=(i?b==="pos"?"+=":"-=": +b==="pos"?"-=":"+=")+l;c.animate(k,{queue:false,duration:g.duration,easing:g.easing,complete:function(){f=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()}})}})(jQuery); +(function(a){a.effects.effect.explode=function(g,d){function c(){j.push(this);if(j.length==e*f){i.css({visibility:"visible"});a(j).remove();b||i.hide();d()}}var e=g.pieces?Math.round(Math.sqrt(g.pieces)):3,f=e,i=a(this),b=a.effects.setMode(i,g.mode||"hide")==="show",h=i.show().css("visibility","hidden").offset(),k=Math.ceil(i.outerWidth()/f),l=Math.ceil(i.outerHeight()/e),j=[],m,n,o,p,q,u;for(m=0;m").css({position:"absolute", +visibility:"visible",left:-n*k,top:-m*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:k,height:l,left:o+(b?q*k:0),top:p+(b?u*l:0),opacity:b?0:1}).animate({left:o+(b?0:q*k),top:p+(b?0:u*l),opacity:b?1:0},g.duration||500,g.easing,c)}}}})(jQuery); +(function(a){a.effects.effect.fade=function(g,d){var c=a(this),e=a.effects.setMode(c,g.mode||"toggle")==="hide";c.show();c.animate({opacity:e?0:1},{queue:false,duration:g.duration,easing:g.easing,complete:function(){e&&c.hide();d()}})}})(jQuery); +(function(a){a.effects.effect.fold=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"hide"),i=f==="show",b=f==="hide";f=g.size||15;var h=/([0-9]+)%/.exec(f),k=!!g.horizFirst,l=i!=k,j=l?["width","height"]:["height","width"],m=g.duration/2,n,o={},p={};a.effects.save(c,e);c.show();n=a.effects.createWrapper(c).css({overflow:"hidden"});l=l?[n.width(),n.height()]:[n.height(),n.width()];if(h)f=parseInt(h[1],10)/100*l[b?0:1];if(i)n.css(k? +{height:0,width:f}:{height:f,width:0});o[j[0]]=i?l[0]:f;p[j[1]]=i?l[1]:0;n.animate(o,m,g.easing).animate(p,m,g.easing,function(){b&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()})}})(jQuery); +(function(a){a.effects.effect.highlight=function(g,d){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],f=a.effects.setMode(c,g.mode||"show"),i={backgroundColor:c.css("backgroundColor")};if(f==="hide")i.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:g.color||"#ffff99"}).animate(i,{queue:false,duration:g.duration,easing:g.easing,complete:function(){f==="hide"&&c.hide();a.effects.restore(c,e);d()}})}})(jQuery); +(function(a){a.effects.effect.pulsate=function(g,d){var c=a(this),e=a.effects.setMode(c,g.mode||"show"),f=e==="show",i=e==="hide";e=(g.times||5)*2+(f||e==="hide"?1:0);var b=g.duration/e,h=0,k=c.queue(),l=k.length;if(f||!c.is(":visible")){c.css("opacity",0).show();h=1}for(f=1;f1&&k.splice.apply(k,[1,0].concat(k.splice(l,e+1)));c.dequeue()}})(jQuery); +(function(a){a.effects.effect.puff=function(g,d){var c=a(this),e=a.effects.setMode(c,g.mode||"hide"),f=e==="hide",i=parseInt(g.percent,10)||150,b=i/100,h={height:c.height(),width:c.width()};a.extend(g,{effect:"scale",queue:false,fade:true,mode:e,complete:d,percent:f?i:100,from:f?h:{height:h.height*b,width:h.width*b}});c.effect(g)};a.effects.effect.scale=function(g,d){var c=a(this),e=a.extend(true,{},g),f=a.effects.setMode(c,g.mode||"effect"),i=parseInt(g.percent,10)||(parseInt(g.percent,10)==0?0: +f=="hide"?0:100),b=g.direction||"both",h=g.origin,k={height:c.height(),width:c.width(),outerHeight:c.outerHeight(),outerWidth:c.outerWidth()};i={y:b!="horizontal"?i/100:1,x:b!="vertical"?i/100:1};e.effect="size";e.queue=false;e.complete=d;if(f!="effect"){e.origin=h||["middle","center"];e.restore=true}e.from=g.from||(f=="show"?{height:0,width:0}:k);e.to={height:k.height*i.y,width:k.width*i.x,outerHeight:k.outerHeight*i.y,outerWidth:k.outerWidth*i.x};if(e.fade){if(f=="show"){e.from.opacity=0;e.to.opacity= +1}if(f=="hide"){e.from.opacity=1;e.to.opacity=0}}c.effect(e)};a.effects.effect.size=function(g,d){var c=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],f=["position","top","bottom","left","right","overflow","opacity"],i=["width","height","overflow"],b=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],l=a.effects.setMode(c,g.mode||"effect"),j=g.restore|| +l!=="effect",m=g.scale||"both",n=g.origin||["middle","center"],o,p,q,u=c.css("position"),s=c.css("bottom")!=="auto"?"bottom":"top";originalHorizontalPositioning=c.css("right")!=="auto"?"right":"left";l==="show"&&c.show();o={height:c.height(),width:c.width(),outerHeight:c.outerHeight(),outerWidth:c.outerWidth()};c.from=g.from||o;c.to=g.to||o;q={from:{y:c.from.height/o.height,x:c.from.width/o.width},to:{y:c.to.height/o.height,x:c.to.width/o.width}};if(m=="box"||m=="both"){if(q.from.y!==q.to.y){e=e.concat(h); +c.from=a.effects.setTransition(c,h,q.from.y,c.from);c.to=a.effects.setTransition(c,h,q.to.y,c.to)}if(q.from.x!==q.to.x){e=e.concat(k);c.from=a.effects.setTransition(c,k,q.from.x,c.from);c.to=a.effects.setTransition(c,k,q.to.x,c.to)}}if(m=="content"||m=="both")if(q.from.y!==q.to.y){e=e.concat(b);c.from=a.effects.setTransition(c,b,q.from.y,c.from);c.to=a.effects.setTransition(c,b,q.to.y,c.to)}a.effects.save(c,j?e:f);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(n){p= +a.effects.getBaseline(n,o);c.from.top=(o.outerHeight-c.outerHeight())*p.y;c.from.left=(o.outerWidth-c.outerWidth())*p.x;c.to.top=(o.outerHeight-c.to.outerHeight)*p.y;c.to.left=(o.outerWidth-c.to.outerWidth)*p.x}c.css(c.from);if(m=="content"||m=="both"){h=h.concat(["marginTop","marginBottom"]).concat(b);k=k.concat(["marginLeft","marginRight"]);i=e.concat(h).concat(k);c.find("*[width]").each(function(){var r=a(this),t={height:r.height(),width:r.width()};j&&a.effects.save(r,i);r.from={height:t.height* +q.from.y,width:t.width*q.from.x};r.to={height:t.height*q.to.y,width:t.width*q.to.x};if(q.from.y!=q.to.y){r.from=a.effects.setTransition(r,h,q.from.y,r.from);r.to=a.effects.setTransition(r,h,q.to.y,r.to)}if(q.from.x!=q.to.x){r.from=a.effects.setTransition(r,k,q.from.x,r.from);r.to=a.effects.setTransition(r,k,q.to.x,r.to)}r.css(r.from);r.animate(r.to,g.duration,g.easing,function(){j&&a.effects.restore(r,i)})})}c.animate(c.to,{queue:false,duration:g.duration,easing:g.easing,complete:function(){c.to.opacity=== +0&&c.css("opacity",c.from.opacity);l=="hide"&&c.hide();a.effects.restore(c,j?e:f);j||(u==="static"?c.css({position:"relative",top:c.to.top,left:c.to.left}):a.each([s,originalHorizontalPositioning],function(r,t){c.css(t,function(v,w){var x=parseInt(w,10),C=r?c.to.left:c.to.top,A=r?c.to.outerWidth-c.from.outerWidth:c.to.outerHeight-c.from.outerHeight,y=n[r]===t,D=n[r]==="middle"||n[r]==="center";if(w==="auto")return C+"px";if(!(t=="left"||t=="top"))if(u==="relative")C*=-1;else D||(C-=A*(y?-1:1));return x+ +C+"px"})}));a.effects.removeWrapper(c);d()}})}})(jQuery); +(function(a){a.effects.effect.shake=function(g,d){var c=a(this),e=["position","top","bottom","left","right","height","width"],f=a.effects.setMode(c,g.mode||"effect"),i=g.direction||"left",b=g.distance||20,h=g.times||3,k=h*2+1,l=g.duration,j=i=="up"||i=="down"?"top":"left",m=i=="up"||i=="left";i={};var n={},o={},p=c.queue(),q=p.length;a.effects.save(c,e);c.show();a.effects.createWrapper(c);i[j]=(m?"-=":"+=")+b;n[j]=(m?"+=":"-=")+b*2;o[j]=(m?"-=":"+=")+b*2;c.animate(i,l,g.easing);for(b=1;b1&&p.splice.apply(p,[1,0].concat(p.splice(q,k+1)));c.dequeue()}})(jQuery); +(function(a){a.effects.effect.slide=function(g,d){var c=a(this),e=["position","top","bottom","left","right","width","height"],f=a.effects.setMode(c,g.mode||"show"),i=f==="show",b=g.direction||"left",h=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left";var k,l={};a.effects.save(c,e);c.show();k=g.distance||c[h==="top"?"outerHeight":"outerWidth"]({margin:true});a.effects.createWrapper(c).css({overflow:"hidden"});if(i)c.css(h,b?isNaN(k)?"-"+k:-k:k);l[h]=(i?b?"+=":"-=":b?"-=":"+=")+k;c.animate(l,{queue:false, +duration:g.duration,easing:g.easing,complete:function(){f==="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d()}})}})(jQuery); +(function(a){a.effects.effect.transfer=function(g,d){var c=a(this),e=a(g.to),f=e.css("position")==="fixed",i=a("body"),b=f?i.scrollTop():0;i=f?i.scrollLeft():0;var h=e.offset();e={top:h.top-b,left:h.left-i,height:e.innerHeight(),width:e.innerWidth()};h=c.offset();var k=a('
').appendTo(document.body).addClass(g.className).css({top:h.top-b,left:h.left-i,height:c.innerHeight(),width:c.innerWidth(),position:f?"fixed":"absolute"}).animate(e,g.duration,g.easing,function(){k.remove(); +d()})}})(jQuery); +(function(a){a.widget("ui.accordion",{version:"1.9pre",options:{active:0,animated:"slide",collapsible:false,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var g=this.options;this.lastToggle={};this.element.addClass("ui-accordion ui-widget ui-helper-reset");this.headers=this.element.find(g.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all");this._hoverable(this.headers); +this._focusable(this.headers);this.headers.find(":first-child").addClass("ui-accordion-heading");this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(!g.collapsible&&g.active===false)g.active=0;if(g.active<0)g.active+=this.headers.length;this.active=this._findActive(g.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");this._createIcons(); +this.refresh();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown.accordion",a.proxy(this,"_keydown")).next().attr("role","tabpanel");this.headers.not(this.active).attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();this.active.length?this.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):this.headers.eq(0).attr("tabIndex",0);a.browser.safari||this.headers.find("a").attr("tabIndex",-1);this._setupEvents(g.event)},_createIcons:function(){var g= +this.options.icons;if(g){a("").addClass("ui-accordion-header-icon ui-icon "+g.header).prependTo(this.headers);this.active.children(".ui-accordion-header-icon").removeClass(g.header).addClass(g.activeHeader);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-accordion-header-icon").remove();this.element.removeClass("ui-accordion-icons")},_destroy:function(){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").find("a").removeAttr("tabIndex").end().find(".ui-accordion-heading").removeClass("ui-accordion-heading"); +this._destroyIcons();var g=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");this.options.heightStyle!=="content"&&g.css("height","")},_setOption:function(g,d){if(g==="active")this._activate(d);else{if(g==="event"){this.options.event&&this.headers.unbind(this.options.event+".accordion",this._eventHandler);this._setupEvents(d)}this._super("_setOption", +g,d);g==="collapsible"&&!d&&this.options.active===false&&this._activate(0);if(g==="icons"){this._destroyIcons();d&&this._createIcons()}g==="disabled"&&this.headers.add(this.headers.next()).toggleClass("ui-accordion-disabled ui-state-disabled",!!d)}},_keydown:function(g){if(!(this.options.disabled||g.altKey||g.ctrlKey)){var d=a.ui.keyCode,c=this.headers.length,e=this.headers.index(g.target),f=false;switch(g.keyCode){case d.RIGHT:case d.DOWN:f=this.headers[(e+1)%c];break;case d.LEFT:case d.UP:f=this.headers[(e- +1+c)%c];break;case d.SPACE:case d.ENTER:this._eventHandler(g)}if(f){a(g.target).attr("tabIndex",-1);a(f).attr("tabIndex",0);f.focus();g.preventDefault()}}},refresh:function(){var g=this.options,d=this.element.parent(),c,e;if(g.heightStyle==="fill"){if(!a.support.minHeight){e=d.css("overflow");d.css("overflow","hidden")}c=d.height();this.element.siblings(":visible").each(function(){var f=a(this),i=f.css("position");i==="absolute"||i==="fixed"||(c-=f.outerHeight(true))});e&&d.css("overflow",e);this.headers.each(function(){c-= +a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else if(g.heightStyle==="auto"){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},_activate:function(g){g=this._findActive(g)[0];if(g!==this.active[0]){g=g||this.active[0];this._eventHandler({target:g,currentTarget:g,preventDefault:a.noop})}},_findActive:function(g){return typeof g==="number"? +this.headers.eq(g):a()},_setupEvents:function(g){g&&this.headers.bind(g.split(" ").join(".accordion ")+".accordion",a.proxy(this,"_eventHandler"))},_eventHandler:function(g){var d=this.options,c=this.active,e=a(g.currentTarget),f=e[0]===c[0],i=f&&d.collapsible,b=i?a():e.next(),h=c.next();b={oldHeader:c,oldContent:h,newHeader:i?a():e,newContent:b};g.preventDefault();if(!(d.disabled||f&&!d.collapsible||this._trigger("beforeActivate",g,b)===false)){d.active=i?false:this.headers.index(e);this.active= +f?a():e;this._toggle(b);c.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-accordion-header-icon").removeClass(d.icons.activeHeader).addClass(d.icons.header);if(!f){e.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-accordion-header-icon").removeClass(d.icons.header).addClass(d.icons.activeHeader);e.next().addClass("ui-accordion-content-active")}}},_toggle:function(g){function d(){c._completed(g)} +var c=this,e=c.options,f=g.newContent,i=g.oldContent;if(e.animated){var b=a.ui.accordion.animations;e=e.animated;var h;if(!b[e]){h={easing:a.easing[e]?e:"slide",duration:700};e="slide"}b[e]({widget:c,toShow:f,toHide:i,prevShow:c.lastToggle.toShow,prevHide:c.lastToggle.toHide,complete:d,down:f.length&&(!i.length||f.index()",options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var d=this,c=this.element[0].ownerDocument,e,f;this.valueMethod=this.element[this.element.is("input,textarea")?"val":"text"];this.element.addClass("ui-autocomplete-input").attr("autocomplete", +"off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(i){if(d.options.disabled||d.element.prop("readOnly"))f=e=true;else{f=e=false;var b=a.ui.keyCode;switch(i.keyCode){case b.PAGE_UP:e=true;d._move("previousPage",i);break;case b.PAGE_DOWN:e=true;d._move("nextPage",i);break;case b.UP:e=true;d._move("previous",i);i.preventDefault();break;case b.DOWN:e=true;d._move("next",i);i.preventDefault();break;case b.ENTER:case b.NUMPAD_ENTER:if(d.menu.active){e= +true;i.preventDefault()}case b.TAB:if(!d.menu.active)break;d.menu.select(i);break;case b.ESCAPE:if(d.menu.element.is(":visible")){d._value(d.term);d.close(i)}break;default:d._searchTimeout(i)}}}).bind("keypress.autocomplete",function(i){if(e){e=false;i.preventDefault()}else{var b=a.ui.keyCode;switch(i.keyCode){case b.PAGE_UP:d._move("previousPage",i);break;case b.PAGE_DOWN:d._move("nextPage",i);break;case b.UP:d._move("previous",i);i.preventDefault();break;case b.DOWN:d._move("next",i);i.preventDefault()}}}).bind("input.autocomplete", +function(i){if(f){f=false;i.preventDefault()}else d._searchTimeout(i)}).bind("focus.autocomplete",function(){if(!d.options.disabled){d.selectedItem=null;d.previous=d._value()}}).bind("blur.autocomplete",function(i){if(!d.options.disabled){clearTimeout(d.searching);d.closing=setTimeout(function(){d.close(i);d._change(i)},150)}});this._initSource();this.response=function(){return d._response.apply(d,arguments)};this.menu=a("
    ").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body", +c)[0]).mousedown(function(i){var b=d.menu.element[0];a(i.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(h){h.target!==d.element[0]&&h.target!==b&&!a.contains(b,h.target)&&d.close()})},1);setTimeout(function(){clearTimeout(d.closing)},13)}).menu({input:a(),focus:function(i,b){var h=b.item.data("item.autocomplete");false!==d._trigger("focus",i,{item:h})&&/^key/.test(i.originalEvent.type)&&d._value(h.value)},select:function(i,b){var h=b.item.data("item.autocomplete"), +k=d.previous;if(d.element[0]!==c.activeElement){d.element.focus();d.previous=k;setTimeout(function(){d.previous=k;d.selectedItem=h},1)}false!==d._trigger("select",i,{item:h})&&d._value(h.value);d.term=d._value();d.close(i);d.selectedItem=h}}).zIndex(this.element.zIndex()+1).hide().data("menu");a.fn.bgiframe&&this.menu.element.bgiframe()},_destroy:function(){clearTimeout(this.searching);this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"); +this.menu.element.remove()},_setOption:function(d,c){this._super("_setOption",d,c);d==="source"&&this._initSource();if(d==="appendTo")this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]);d==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var d=this,c,e;if(a.isArray(this.options.source)){c=this.options.source;this.source=function(f,i){i(a.ui.autocomplete.filter(c,f.term))}}else if(typeof this.options.source==="string"){e=this.options.source;this.source=function(f, +i){d.xhr&&d.xhr.abort();d.xhr=a.ajax({url:e,data:f,dataType:"json",autocompleteRequest:++g,success:function(b){this.autocompleteRequest===g&&i(b)},error:function(){this.autocompleteRequest===g&&i([])}})}}else this.source=this.options.source},_searchTimeout:function(d){var c=this;clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!==c._value()){c.selectedItem=null;c.search(null,d)}},c.options.delay)},search:function(d,c){d=d!=null?d:this._value();this.term=this._value();if(d.length< +this.options.minLength)return this.close(c);clearTimeout(this.closing);if(this._trigger("search",c)!==false)return this._search(d)},_search:function(d){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:d},this.response)},_response:function(d){if(d)d=this._normalize(d);this._trigger("response",null,{content:d});if(!this.options.disabled&&d&&d.length){this._suggest(d);this._trigger("open")}else this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")}, +close:function(d){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.blur();this._trigger("close",d)}},_change:function(d){this.previous!==this._value()&&this._trigger("change",d,{item:this.selectedItem})},_normalize:function(d){if(d.length&&d[0].label&&d[0].value)return d;return a.map(d,function(c){if(typeof c==="string")return{label:c,value:c};return a.extend({label:c.label||c.value,value:c.value||c.label},c)})},_suggest:function(d){var c=this.menu.element.empty().zIndex(this.element.zIndex()+ +1);this._renderMenu(c,d);this.menu.blur();this.menu.refresh();c.show();this._resizeMenu();c.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var d=this.menu.element;d.outerWidth(Math.max(d.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(d,c){var e=this;a.each(c,function(f,i){e._renderItem(d,i)})},_renderItem:function(d,c){return a("
  • ").data("item.autocomplete",c).append(a("
    ").text(c.label)).appendTo(d)}, +_move:function(d,c){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(d)||this.menu.last()&&/^next/.test(d)){this._value(this.term);this.menu.blur()}else this.menu[d](c);else this.search(null,c)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)}});a.extend(a.ui.autocomplete,{escapeRegex:function(d){return d.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(d,c){var e=RegExp(a.ui.autocomplete.escapeRegex(c), +"i");return a.grep(d,function(f){return e.test(f.label||f.value||f)})}})})(jQuery); +(function(a){var g,d,c,e,f=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var h=b.name,k=b.form,l=a([]);if(h)l=k?a(k).find("[name='"+h+"']"):a("[name='"+h+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{version:"1.9pre",defaultElement:"').addClass(this._triggerClass).html(j==""?k:a("").attr({src:j,alt:k,title:k})));b[l?"before":"after"](h.trigger);h.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker(): +a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var h=new Date(2009,11,20),k=this._get(b,"dateFormat");if(k.match(/[DM]/)){var l=function(j){for(var m=0,n=0,o=0;om){m=j[o].length;n=o}return n};h.setMonth(l(this._get(b,k.match(/MM/)?"monthNames":"monthNamesShort")));h.setDate(l(this._get(b,k.match(/DD/)?"dayNames":"dayNamesShort"))+20-h.getDay())}b.input.attr("size",this._formatDate(b,h).length)}},_inlineDatepicker:function(b, +h){var k=a(b);if(!k.hasClass(this.markerClassName)){k.addClass(this.markerClassName).append(h.dpDiv).bind("setData.datepicker",function(l,j,m){h.settings[j]=m}).bind("getData.datepicker",function(l,j){return this._get(h,j)});a.data(b,"datepicker",h);this._setDate(h,this._getDefaultDate(h),true);this._updateDatepicker(h);this._updateAlternate(h);h.settings.disabled&&this._disableDatepicker(b);h.dpDiv.css("display","block")}},_dialogDatepicker:function(b,h,k,l,j){b=this._dialogInst;if(!b){this.uuid+= +1;this._dialogInput=a('');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}e(b.settings,l||{});h=h&&h.constructor==Date?this._formatDate(b,h):h;this._dialogInput.val(h);this._pos=j?j.length?j:[j.pageX,j.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/ +2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=k;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var h= +a(b),k=a.data(b,"datepicker");if(h.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){k.append.remove();k.trigger.remove();h.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")h.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var h=a(b),k=a.data(b,"datepicker");if(h.hasClass(this.markerClassName)){var l= +b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;k.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){h=h.children("."+this._inlineClass);h.children().removeClass("ui-state-disabled");h.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",false)}this._disabledInputs=a.map(this._disabledInputs,function(j){return j==b?null:j})}},_disableDatepicker:function(b){var h=a(b),k=a.data(b, +"datepicker");if(h.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;k.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){h=h.children("."+this._inlineClass);h.children().addClass("ui-state-disabled");h.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",true)}this._disabledInputs=a.map(this._disabledInputs,function(j){return j==b? +null:j});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var h=0;h-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(h){a.datepicker.log(h)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!= +"input")b=a("input",b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var h=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=h){a.datepicker._curInst.dpDiv.stop(true,true);h&&a.datepicker._datepickerShowing&&a.datepicker._hideDatepicker(a.datepicker._curInst.input[0])}var k=a.datepicker._get(h,"beforeShow");k=k?k.apply(b,[b,h]):{};if(k!==false){e(h.settings,k);h.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(h); +if(a.datepicker._inDialog)b.value="";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}k={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;h.dpDiv.empty();h.dpDiv.css({position:"absolute",display:"block", +top:"-1000px"});a.datepicker._updateDatepicker(h);k=a.datepicker._checkOffset(h,k,l);h.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:k.left+"px",top:k.top+"px"});if(!h.inline){k=a.datepicker._get(h,"showAnim");var j=a.datepicker._get(h,"duration"),m=function(){var n=h.dpDiv.find("iframe.ui-datepicker-cover");if(n.length){var o=a.datepicker._getBorders(h.dpDiv);n.css({left:-o[0],top:-o[1],width:h.dpDiv.outerWidth(),height:h.dpDiv.outerHeight()})}}; +h.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=true;if(a.effects&&(a.effects.effect[k]||a.effects[k]))h.dpDiv.show(k,a.datepicker._get(h,"showOptions"),j,m);else h.dpDiv[k||"show"](k?j:null,m);if(!k||!j)m();h.input.is(":visible")&&!h.input.is(":disabled")&&h.input.focus();a.datepicker._curInst=h}}}},_updateDatepicker:function(b){this.maxRows=4;var h=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var k=b.dpDiv.find("iframe.ui-datepicker-cover"); +k.length&&k.css({left:-h[0],top:-h[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});b.dpDiv.find("."+this._dayOverClass+" a").mouseover();h=this._getNumberOfMonths(b);k=h[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");k>1&&b.dpDiv.addClass("ui-datepicker-multi-"+k).css("width",17*k+"em");b.dpDiv[(h[0]!=1||h[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var h=function(k){return{thin:1,medium:2,thick:3}[k]||k};return[parseFloat(h(b.css("border-left-width"))),parseFloat(h(b.css("border-top-width")))]}, +_checkOffset:function(b,h,k){var l=b.dpDiv.outerWidth(),j=b.dpDiv.outerHeight(),m=b.input?b.input.outerWidth():0,n=b.input?b.input.outerHeight():0,o=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();h.left-=this._get(b,"isRTL")?l-m:0;h.left-=k&&h.left==b.input.offset().left?a(document).scrollLeft():0;h.top-=k&&h.top==b.input.offset().top+n?a(document).scrollTop():0;h.left-=Math.min(h.left,h.left+l>o&&o>l?Math.abs(h.left+l- +o):0);h.top-=Math.min(h.top,h.top+j>p&&p>j?Math.abs(j+n):0);return h},_findPos:function(b){for(var h=this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[h?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_hideDatepicker:function(b){var h=this._curInst;if(!(!h||b&&h!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(h,"showAnim");var k=this._get(h,"duration"),l=function(){a.datepicker._tidyDialog(h);this._curInst= +null};if(a.effects&&(a.effects.effect[b]||a.effects[b]))h.dpDiv.hide(b,a.datepicker._get(h,"showOptions"),k,l);else h.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?k:null,l);b||l();this._datepickerShowing=false;if(b=this._get(h,"onClose"))b.apply(h.input?h.input[0]:null,[h.input?h.input.val():"",h]);this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}}, +_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);var h=a.datepicker._getInst(b[0]);if(b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)||b.hasClass(a.datepicker.markerClassName)&&a.datepicker._curInst!= +h)a.datepicker._hideDatepicker()}},_adjustDate:function(b,h,k){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,h+(k=="M"?this._get(l,"showCurrentAtPos"):0),k);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var h=this._getInst(b[0]);if(this._get(h,"gotoCurrent")&&h.currentDay){h.selectedDay=h.currentDay;h.drawMonth=h.selectedMonth=h.currentMonth;h.drawYear=h.selectedYear=h.currentYear}else{var k=new Date;h.selectedDay=k.getDate();h.drawMonth= +h.selectedMonth=k.getMonth();h.drawYear=h.selectedYear=k.getFullYear()}this._notifyChange(h);this._adjustDate(b)},_selectMonthYear:function(b,h,k){b=a(b);var l=this._getInst(b[0]);l["selected"+(k=="M"?"Month":"Year")]=l["draw"+(k=="M"?"Month":"Year")]=parseInt(h.options[h.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,h,k,l){var j=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(j[0]))){j=this._getInst(j[0]);j.selectedDay=j.currentDay= +a("a",l).html();j.selectedMonth=j.currentMonth=h;j.selectedYear=j.currentYear=k;this._selectDate(b,this._formatDate(j,j.currentDay,j.currentMonth,j.currentYear))}},_clearDate:function(b){b=a(b);this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,h){var k=this._getInst(a(b)[0]);h=h!=null?h:this._formatDate(k);k.input&&k.input.val(h);this._updateAlternate(k);var l=this._get(k,"onSelect");if(l)l.apply(k.input?k.input[0]:null,[h,k]);else k.input&&k.input.trigger("change");if(k.inline)this._updateDatepicker(k); +else{this._hideDatepicker();this._lastInput=k.input[0];typeof k.input[0]!="object"&&k.input.focus();this._lastInput=null}},_updateAlternate:function(b){var h=this._get(b,"altField");if(h){var k=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),j=this.formatDate(k,l,this._getFormatConfig(b));a(h).each(function(){a(this).val(j)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var h= +b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((h-b)/864E5)/7)+1},parseDate:function(b,h,k){if(b==null||h==null)throw"Invalid arguments";h=typeof h=="object"?h.toString():h+"";if(h=="")return null;var l=(k?k.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var j=(k?k.dayNamesShort:null)||this._defaults.dayNamesShort,m=(k?k.dayNames:null)||this._defaults.dayNames,n=(k?k.monthNamesShort:null)||this._defaults.monthNamesShort, +o=(k?k.monthNames:null)||this._defaults.monthNames,p=k=-1,q=-1,u=-1,s=false,r=function(y){(y=C+1-1){p=1;q=u;do{l=this._getDaysInMonth(k,p-1); +if(q<=l)break;p++;q-=l}while(1)}A=this._daylightSavingAdjust(new Date(k,p-1,q));if(A.getFullYear()!=k||A.getMonth()+1!=p||A.getDate()!=q)throw"Invalid date";return A},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))*864E9,formatDate:function(b,h,k){if(!h)return""; +var l=(k?k.dayNamesShort:null)||this._defaults.dayNamesShort,j=(k?k.dayNames:null)||this._defaults.dayNames,m=(k?k.monthNamesShort:null)||this._defaults.monthNamesShort;k=(k?k.monthNames:null)||this._defaults.monthNames;var n=function(r){(r=s+112?b.getHours()+2:0);return b},_setDate:function(b,h,k){var l=!h,j=b.selectedMonth,m=b.selectedYear;h=this._restrictMinMax(b,this._determineDate(b,h,new Date));b.selectedDay=b.currentDay=h.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=h.getMonth();b.drawYear=b.selectedYear=b.currentYear=h.getFullYear();if((j!=b.selectedMonth||m!=b.selectedYear)&& +!k)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&&b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var h=new Date;h=this._daylightSavingAdjust(new Date(h.getFullYear(),h.getMonth(),h.getDate()));var k=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),j=this._get(b,"hideIfNoPrevNext"),m=this._get(b,"navigationAsDateFormat"), +n=this._getNumberOfMonths(b),o=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=n[0]!=1||n[1]!=1,u=this._daylightSavingAdjust(!b.currentDay?new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),s=this._getMinMaxDate(b,"min"),r=this._getMinMaxDate(b,"max");o=b.drawMonth-o;var t=b.drawYear;if(o<0){o+=12;t--}if(r){var v=this._daylightSavingAdjust(new Date(r.getFullYear(),r.getMonth()-n[0]*n[1]+1,r.getDate()));for(v=s&&v +v;){o--;if(o<0){o=11;t--}}}b.drawMonth=o;b.drawYear=t;v=this._get(b,"prevText");v=!m?v:this.formatDate(v,this._daylightSavingAdjust(new Date(t,o-p,1)),this._getFormatConfig(b));v=this._canAdjustMonth(b,-1,t,o)?''+v+"":j?"":''+v+"";var w=this._get(b,"nextText");w=!m?w:this.formatDate(w,this._daylightSavingAdjust(new Date(t,o+p,1)),this._getFormatConfig(b));j=this._canAdjustMonth(b,+1,t,o)?''+w+"":j?"":''+w+"";p=this._get(b,"currentText");w=this._get(b,"gotoCurrent")&&b.currentDay?u:h;p=!m?p:this.formatDate(p,w,this._getFormatConfig(b));m=!b.inline?'":"";l=l?'
    '+(k?m:"")+(this._isInRange(b, +w)?'":"")+(k?"":m)+"
    ":"";m=parseInt(this._get(b,"firstDay"),10);m=isNaN(m)?0:m;p=this._get(b,"showWeek");w=this._get(b,"dayNames");this._get(b,"dayNamesShort");var x=this._get(b,"dayNamesMin"),C=this._get(b,"monthNames"),A=this._get(b,"monthNamesShort"),y=this._get(b,"beforeShowDay"),D=this._get(b,"showOtherMonths"), +J=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var I=this._getDefaultDate(b),H="",E=0;E1)switch(M){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(k?"right":"left");break;case n[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(k?"left":"right");break;default:F+=" ui-datepicker-group-middle"; +B=""}F+='">'}F+='
    '+(/all|left/.test(B)&&E==0?k?j:v:"")+(/all|right/.test(B)&&E==0?k?v:j:"")+this._generateMonthYearHeader(b,o,t,s,r,E>0||M>0,C,A)+'
    ';var G=p?'":"";for(B=0;B<7;B++){var z=(B+m)%7;G+="=5?' class="ui-datepicker-week-end"':"")+'>'+x[z]+""}F+= +G+"";G=this._getDaysInMonth(t,o);if(t==b.selectedYear&&o==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,G);B=(this._getFirstDayOfMonth(t,o)-m+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;z=this._daylightSavingAdjust(new Date(t,o,1-B));for(var Q=0;Q";var R=!p?"":'";for(B=0;B<7;B++){var N=y?y.apply(b.input?b.input[0]:null,[z]):[true,""],L=z.getMonth()!= +o,O=L&&!J||!N[0]||s&&zr;R+='";z.setDate(z.getDate()+1);z=this._daylightSavingAdjust(z)}F+=R+""}o++;if(o>11){o=0;t++}F+="
    '+this._get(b,"weekHeader")+"
    '+this._get(b,"calculateWeek")(z)+""+(L&&!D?" ":O?''+z.getDate()+"":''+z.getDate()+"")+"
    "+(q?""+ +(n[0]>0&&M==n[1]-1?'
    ':""):"");K+=F}H+=K}H+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'':"");b._keyEvent=false;return H},_generateMonthYearHeader:function(b,h,k,l,j,m,n,o){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),u=this._get(b,"showMonthAfterYear"),s='
    ',r="";if(m||!p)r+=''+ +n[h]+"";else{n=l&&l.getFullYear()==k;var t=j&&j.getFullYear()==k;r+='"}u||(s+=r+(m||!(p&&q)?" ":""));if(!b.yearshtml){b.yearshtml="";if(m||!q)s+=''+k+"";else{o=this._get(b, +"yearRange").split(":");var w=(new Date).getFullYear();n=function(x){x=x.match(/c[+-].*/)?k+parseInt(x.substring(1),10):x.match(/[+-].*/)?w+parseInt(x,10):parseInt(x,10);return isNaN(x)?w:x};h=n(o[0]);o=Math.max(h,n(o[1]||""));h=l?Math.max(h,l.getFullYear()):h;o=j?Math.min(o,j.getFullYear()):o;for(b.yearshtml+='";s+=b.yearshtml;b.yearshtml=null}}s+=this._get(b,"yearSuffix");if(u)s+=(m||!(p&&q)?" ":"")+r;s+="
    ";return s},_adjustInstDate:function(b,h,k){var l=b.drawYear+(k=="Y"?h:0),j=b.drawMonth+(k=="M"?h:0);h=Math.min(b.selectedDay,this._getDaysInMonth(l,j))+(k=="D"?h:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,j,h)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(k== +"M"||k=="Y")this._notifyChange(b)},_restrictMinMax:function(b,h){var k=this._getMinMaxDate(b,"min"),l=this._getMinMaxDate(b,"max");k=k&&hl?l:k},_notifyChange:function(b){var h=this._get(b,"onChangeMonthYear");if(h)h.apply(b.input?b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,h){return this._determineDate(b,this._get(b,h+"Date"),null)}, +_getDaysInMonth:function(b,h){return 32-this._daylightSavingAdjust(new Date(b,h,32)).getDate()},_getFirstDayOfMonth:function(b,h){return(new Date(b,h,1)).getDay()},_canAdjustMonth:function(b,h,k,l){var j=this._getNumberOfMonths(b);k=this._daylightSavingAdjust(new Date(k,l+(h<0?h:j[0]*j[1]),1));h<0&&k.setDate(this._getDaysInMonth(k.getFullYear(),k.getMonth()));return this._isInRange(b,k)},_isInRange:function(b,h){var k=this._getMinMaxDate(b,"min"),l=this._getMinMaxDate(b,"max");return(!k||h.getTime()>= +k.getTime())&&(!l||h.getTime()<=l.getTime())},_getFormatConfig:function(b){var h=this._get(b,"shortYearCutoff");h=typeof h!="string"?h:(new Date).getFullYear()%100+parseInt(h,10);return{shortYearCutoff:h,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,h,k,l){if(!h){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}h=h?typeof h== +"object"?h:this._daylightSavingAdjust(new Date(l,k,h)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),h,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var h=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"|| +b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(h));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(h));return this.each(function(){typeof b=="string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(h)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new d;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime(); +a.datepicker.version="1.9pre";window["DP_jQuery_"+f]=a})(jQuery); +(function(a,g){var d={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},c={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};a.widget("ui.dialog",{version:"1.9pre",options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var f=a(this).css(e).offset().top; +f<0&&a(this).css("top",e.top-f)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var e=this,f=e.options,i=f.title||" ",b=a.ui.dialog.getTitleId(e.element),h=(e.uiDialog=a("
    ")).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+f.dialogClass).css({display:"none",outline:0,zIndex:f.zIndex}).attr("tabIndex", +-1).keydown(function(j){if(f.closeOnEscape&&!j.isDefaultPrevented()&&j.keyCode&&j.keyCode===a.ui.keyCode.ESCAPE){e.close(j);j.preventDefault()}}).attr({role:"dialog","aria-labelledby":b}).mousedown(function(j){e.moveToTop(false,j)}).appendTo("body");e.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(h);var k=(e.uiDialogTitlebar=a("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(h),l=a("").addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", +"button").click(function(j){j.preventDefault();e.close(j)}).appendTo(k);(e.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(f.closeText).appendTo(l);a("").addClass("ui-dialog-title").attr("id",b).html(i).prependTo(k);k.find("*").add(k).disableSelection();this._hoverable(l);this._focusable(l);f.draggable&&a.fn.draggable&&e._makeDraggable();f.resizable&&a.fn.resizable&&e._makeResizable();e._createButtons(f.buttons);e._isOpen=false;a.fn.bgiframe&&h.bgiframe()}, +_init:function(){this.options.autoOpen&&this.open()},_destroy:function(){this.overlay&&this.overlay.destroy();this.uiDialog.hide();this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();this.originalTitle&&this.element.attr("title",this.originalTitle)},widget:function(){return this.uiDialog},close:function(e){if(!this._isOpen)return f;var f=this,i,b;if(false!==f._trigger("beforeClose",e)){f._isOpen=false;f.overlay&&f.overlay.destroy();f.uiDialog.unbind("keypress.ui-dialog"); +if(f.options.hide)f.uiDialog.hide(f.options.hide,function(){f._trigger("close",e)});else{f.uiDialog.hide();f._trigger("close",e)}a.ui.dialog.overlay.resize();if(f.options.modal){i=0;a(".ui-dialog").each(function(){if(this!==f.uiDialog[0]){b=a(this).css("z-index");isNaN(b)||(i=Math.max(i,b))}});a.ui.dialog.maxZ=i}return f}},isOpen:function(){return this._isOpen},moveToTop:function(e,f){var i=this.options;if(i.modal&&!e||!i.stack&&!i.modal)return this._trigger("focus",f);if(i.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ= +i.zIndex;if(this.overlay){a.ui.dialog.maxZ+=1;a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ;this.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ)}i={scrollTop:this.element.scrollTop(),scrollLeft:this.element.scrollLeft()};a.ui.dialog.maxZ+=1;this.uiDialog.css("z-index",a.ui.dialog.maxZ);this.element.attr(i);this._trigger("focus",f);return this},open:function(){if(!this._isOpen){var e=this.options,f=this.uiDialog;this._size();this._position(e.position);f.show(e.show);this.overlay=e.modal?new a.ui.dialog.overlay(this): +null;this.moveToTop(true);e.modal&&f.bind("keydown.ui-dialog",function(i){if(i.keyCode===a.ui.keyCode.TAB){var b=a(":tabbable",this),h=b.filter(":first");b=b.filter(":last");if(i.target===b[0]&&!i.shiftKey){h.focus(1);return false}else if(i.target===h[0]&&i.shiftKey){b.focus(1);return false}}});e=this.element.find(":tabbable");if(!e.length){e=f.find(".ui-dialog-buttonpane :tabbable");e.length||(e=f)}e.eq(0).focus();this._isOpen=true;this._trigger("open");return this}},_createButtons:function(e){var f= +this,i=false;f.uiDialog.find(".ui-dialog-buttonpane").remove();typeof e==="object"&&e!==null&&a.each(e,function(){return!(i=true)});if(i){var b=a("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),h=a("
    ").addClass("ui-dialog-buttonset").appendTo(b);a.each(e,function(k,l){l=a.isFunction(l)?{click:l,text:k}:l;var j=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()},value:function(d){if(d===g)return this._value();this._setOption("value",d);return this},_setOption:function(d,c){if(d==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}this._super("_setOption",d,c)},_value:function(){var d=this.options.value;if(typeof d!=="number")d=0;return Math.min(this.options.max,Math.max(this.min,d))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var d= +this.value(),c=this._percentage();if(this.oldValue!==d){this.oldValue=d;this._trigger("change")}this.valueDiv.toggle(d>this.min).toggleClass("ui-corner-right",d===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",d)}})})(jQuery); +(function(a){a.widget("ui.slider",a.ui.mouse,{version:"1.9pre",widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var g=this,d=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),e=d.values&&d.values.length||1,f=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;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([]);if(d.range){if(d.range===true){if(!d.values)d.values=[this._valueMin(),this._valueMin()];if(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=c.length;i"); +this.handles=c.add(a(f.join("")).appendTo(g.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(d.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle", +b)});this.handles.keydown(function(b){var h=true,k=a(this).data("index.ui-slider-handle"),l,j,m;if(!g.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:h=false;if(!g._keySliding){g._keySliding=true;a(this).addClass("ui-state-active");l=g._start(b,k);if(l===false)return}}m=g.options.step;l=g.options.values&&g.options.values.length? +j=g.values(k):j=g.value();switch(b.keyCode){case a.ui.keyCode.HOME:j=g._valueMin();break;case a.ui.keyCode.END:j=g._valueMax();break;case a.ui.keyCode.PAGE_UP:j=g._trimAlignValue(l+(g._valueMax()-g._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:j=g._trimAlignValue(l-(g._valueMax()-g._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===g._valueMax())return;j=g._trimAlignValue(l+m);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===g._valueMin())return;j=g._trimAlignValue(l- +m)}g._slide(b,k,j);return h}}).keyup(function(b){var h=a(this).data("index.ui-slider-handle");if(g._keySliding){g._keySliding=false;g._stop(b,h);g._change(b,h);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); +return this},_mouseCapture:function(g){var d=this.options,c,e,f,i,b;if(d.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:g.pageX,y:g.pageY});e=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(h){var k=Math.abs(c-i.values(h));if(e>k){e=k;f=a(this);b=h}});if(d.range===true&&this.values(1)===d.min){b+=1;f=a(this.handles[b])}if(this._start(g,b)===false)return false; +this._mouseSliding=true;i._handleIndex=b;f.addClass("ui-state-active").focus();d=f.offset();this._clickOffset=!a(g.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:g.pageX-d.left-f.width()/2,top:g.pageY-d.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(g,b,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(g){var d= +this._normValueFromMouse({x:g.pageX,y:g.pageY});this._slide(g,this._handleIndex,d);return false},_mouseStop:function(g){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(g,this._handleIndex);this._change(g,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(g){var d;if(this.orientation==="horizontal"){d= +this.elementSize.width;g=g.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;g=g.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}d=g/d;if(d>1)d=1;if(d<0)d=0;if(this.orientation==="vertical")d=1-d;g=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+d*g)},_start:function(g,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d); +c.values=this.values()}return this._trigger("start",g,c)},_slide:function(g,d,c){var e;if(this.options.values&&this.options.values.length){e=this.values(d?0:1);if(this.options.values.length===2&&this.options.range===true&&(d===0&&c>e||d===1&&c1){this.options.values[g]=this._trimAlignValue(d);this._refreshValue();this._change(null,g)}else if(arguments.length)if(a.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var d=this.options.step>0?this.options.step:1,c=(g-this._valueMin())%d;g-=c;if(Math.abs(c)*2>=d)g+=c>0?d:-d;return parseFloat(g.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var g= +this.options.range,d=this.options,c=this,e=!this._animateOff?d.animate:false,f,i={},b,h,k,l;if(this.options.values&&this.options.values.length)this.handles.each(function(j){f=(c.values(j)-c._valueMin())/(c._valueMax()-c._valueMin())*100;i[c.orientation==="horizontal"?"left":"bottom"]=f+"%";a(this).stop(1,1)[e?"animate":"css"](i,d.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(j===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},d.animate);if(j===1)c.range[e?"animate":"css"]({width:f- +b+"%"},{queue:false,duration:d.animate})}else{if(j===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},d.animate);if(j===1)c.range[e?"animate":"css"]({height:f-b+"%"},{queue:false,duration:d.animate})}b=f});else{h=this.value();k=this._valueMin();l=this._valueMax();f=l!==k?(h-k)/(l-k)*100:0;i[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](i,d.animate);if(g==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"}, +d.animate);if(g==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:d.animate});if(g==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},d.animate);if(g==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:d.animate})}}})})(jQuery); +(function(a){function g(d){return function(){var c=this.element.val();d.apply(this,arguments);this._refresh();c!==this.element.val()&&this._trigger("change")}}a.widget("ui.spinner",{version:"1.9pre",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,incremental:true,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._value(this.element.val(),true);this._draw();this._bind(this._events);this._refresh()},_getCreateOptions:function(){var d= +{},c=this.element;a.each(["min","max","step"],function(e,f){var i=c.attr(f);if(i!==undefined&&i.length)d[f]=i});return d},_events:{keydown:function(d){this._start(d)&&this._keydown(d)&&d.preventDefault()},keyup:"_stop",focus:function(){this.uiSpinner.addClass("ui-state-active");this.previous=this.element.val()},blur:function(d){this._refresh();this.uiSpinner.removeClass("ui-state-active");this.previous!==this.element.val()&&this._trigger("change",d)},mousewheel:function(d,c){if(c){if(!this.spinning&& +!this._start(d))return false;this._spin((c>0?1:-1)*this.options.step,d);clearTimeout(this.mousewheelTimer);this.mousewheelTimer=setTimeout(function(){this.spinning&&this._stop(d)},100);d.preventDefault()}},"mousedown .ui-spinner-button":function(d){d.preventDefault();document.activeElement!==this.element[0]&&this.element.focus();if(this._start(d)!==false)this._repeat(null,a(d.currentTarget).hasClass("ui-spinner-up")?1:-1,d)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(d){if(a(d.currentTarget).hasClass("ui-state-active")){if(this._start(d)=== +false)return false;this._repeat(null,a(d.currentTarget).hasClass("ui-spinner-up")?1:-1,d)}},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var d=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this._hoverable(d);this.element.attr("role","spinbutton");this.buttons=d.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all");this.buttons.height()===d.height()&&d.height()> +0&&d.height(d.height());this.options.disabled&&this.disable()},_keydown:function(d){var c=this.options,e=a.ui.keyCode;switch(d.keyCode){case e.UP:this._repeat(null,1,d);return true;case e.DOWN:this._repeat(null,-1,d);return true;case e.PAGE_UP:this._repeat(null,c.page,d);return true;case e.PAGE_DOWN:this._repeat(null,-c.page,d);return true}return false},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}, +_start:function(d){if(!this.spinning&&this._trigger("start",d)===false)return false;if(!this.counter)this.counter=1;return this.spinning=true},_repeat:function(d,c,e){d=d||500;clearTimeout(this.timer);this.timer=this._delay(function(){this._repeat(40,c,e)},d);this._spin(c*this.options.step,e)},_spin:function(d,c){var e=this.value()||0;if(!this.counter)this.counter=1;e=this._adjustValue(e+d*this._increment(this.counter));if(!this.spinning||this._trigger("spin",c,{value:e})!==false){this._value(e); +this.counter++}},_increment:function(d){var c=this.options.incremental;if(c)return a.isFunction(c)?c(d):Math.floor(d*d*d/5E4-d*d/500+17*d/200+1);return 1},_precision:function(){var d=this._precisionOf(this.options.step);if(this.options.min!==null)d=Math.max(d,this._precisionOf(this.options.min));return d},_precisionOf:function(d){d=d.toString();var c=d.indexOf(".");return c===-1?0:d.length-c-1},_adjustValue:function(d){var c,e=this.options;c=e.min!==null?e.min:0;d=Math.round((d-c)/e.step)*e.step; +d=parseFloat((c+d).toFixed(this._precision()));if(e.max!==null&&d>e.max)return e.max;if(e.min!==null&&d1&&b.href.replace(f,"")===i}}();a.widget("ui.tabs",{version:"1.9pre",options:{active:null,collapsible:false,event:"click",fx:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var f=this,i=f.options,b=i.active;f.running=false;f.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");f._processTabs();if(b===null){location.hash&& +f.anchors.each(function(h,k){if(k.hash===location.hash){b=h;return false}});if(b===null)b=f.lis.filter(".ui-tabs-active").index();if(b===null||b===-1)b=f.lis.length?0:false}if(b!==false){b=this.lis.eq(b).index();if(b===-1)b=i.collapsible?false:0}i.active=b;if(!i.collapsible&&i.active===false&&this.anchors.length)i.active=0;if(a.isArray(i.disabled))i.disabled=a.unique(i.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(h){return f.lis.index(h)}))).sort();this._setupFx(i.fx);this._refresh(); +this.panels.hide();this.lis.removeClass("ui-tabs-active ui-state-active");if(i.active!==false&&this.anchors.length){this.active=this._findActive(i.active);f._getPanelForTab(this.active).show();this.lis.eq(i.active).addClass("ui-tabs-active ui-state-active");this.load(i.active)}else this.active=a()},_setOption:function(f,i){if(f=="active")this._activate(i);else if(f==="disabled")this._setupDisabled(i);else{this._super("_setOption",f,i);f==="collapsible"&&!i&&this.options.active===false&&this._activate(0); +f==="event"&&this._setupEvents(i);f==="fx"&&this._setupFx(i)}},_tabId:function(f){return a(f).attr("aria-controls")||"ui-tabs-"+ ++d},_sanitizeSelector:function(f){return f?f.replace(/[!"$%&'()*+,.\/:;<=>?@[\]^`{|}~]/g,"\\$&"):""},refresh:function(){var f=this.options,i=this.list.children(":has(a[href])");f.disabled=a.map(i.filter(".ui-state-disabled"),function(b){return i.index(b)});this._processTabs();this._refresh();this.panels.not(this._getPanelForTab(this.active)).hide();if(f.active===false|| +!this.anchors.length){f.active=false;this.active=a()}else if(this.active.length&&!a.contains(this.list[0],this.active[0])){f=f.active-1;this._activate(f>=0?f:0)}else f.active=this.anchors.index(this.active)},_refresh:function(){var f=this.options;this.element.toggleClass("ui-tabs-collapsible",f.collapsible);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"); +this._setupDisabled(f.disabled);this._setupEvents(f.event);this.lis.unbind(".tabs");this._focusable(this.lis);this._hoverable(this.lis)},_processTabs:function(){var f=this;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(i,b){var h,k;if(c(b)){h=b.hash;k=f.element.find(f._sanitizeSelector(h))}else{var l=f._tabId(b);h="#"+l;k=f.element.find(h);if(!k.length){k= +f._createPanel(l);k.insertAfter(f.panels[i-1]||f.list)}}if(k.length)f.panels=f.panels.add(k);a(b).attr("aria-controls",h.substring(1))})},_createPanel:function(f){return a("
    ").attr("id",f).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("destroy.tabs",true)},_setupDisabled:function(f){if(a.isArray(f))if(f.length){if(f.length===this.anchors.length)f=true}else f=false;for(var i=0,b;b=this.lis[i];i++)a(b).toggleClass("ui-state-disabled",f===true||a.inArray(i,f)!==-1);this.options.disabled= +f},_setupFx:function(f){if(f)if(a.isArray(f)){this.hideFx=f[0];this.showFx=f[1]}else this.hideFx=this.showFx=f},_resetStyle:function(f,i){!a.support.opacity&&i.opacity&&f[0].style.removeAttribute("filter")},_setupEvents:function(f){this.anchors.unbind(".tabs");f&&this.anchors.bind(f.split(" ").join(".tabs ")+".tabs",a.proxy(this,"_eventHandler"));this.anchors.bind("click.tabs",function(i){i.preventDefault()})},_eventHandler:function(f){var i=this.options,b=this.active,h=a(f.currentTarget),k=h[0]=== +b[0],l=k&&i.collapsible,j=l?a():this._getPanelForTab(h),m=!b.length?a():this._getPanelForTab(b),n=h.closest("li");b={oldTab:b,oldPanel:m,newTab:l?a():h,newPanel:j};f.preventDefault();if(n.hasClass("ui-state-disabled")||n.hasClass("ui-tabs-loading")||this.running||k&&!i.collapsible||this._trigger("beforeActivate",f,b)===false)h[0].blur();else{i.active=l?false:this.anchors.index(h);this.active=k?a():h;this.xhr&&this.xhr.abort();if(!m.length&&!j.length)throw"jQuery UI Tabs: Mismatching fragment identifier."; +if(j.length){this.load(this.anchors.index(h),f);h[0].blur()}this._toggle(f,b)}},_toggle:function(f,i){function b(){k.running=false;k._trigger("activate",f,i)}function h(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active");if(l.length&&k.showFx)l.animate(k.showFx,k.showFx.duration||"normal",function(){k._resetStyle(a(this),k.showFx);b()});else{l.show();b()}}var k=this,l=i.newPanel,j=i.oldPanel;k.running=true;if(j.length&&k.hideFx)j.animate(k.hideFx,k.hideFx.duration||"normal",function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"); +k._resetStyle(a(this),k.hideFx);h()});else{i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");j.hide();h()}},_activate:function(f){f=this._findActive(f)[0];if(f!==this.active[0]){f=f||this.active[0];this._eventHandler({target:f,currentTarget:f,preventDefault:a.noop})}},_findActive:function(f){return typeof f==="number"?this.anchors.eq(f):typeof f==="string"?this.anchors.filter("[href$='"+f+"']"):a()},_getIndex:function(f){if(typeof f=="string")f=this.anchors.index(this.anchors.filter("[href$="+ +f+"]"));return f},_destroy:function(){this.xhr&&this.xhr.abort();this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.unbind(".tabs").removeData("href.tabs").removeData("load.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-active ui-state-active ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom")}); +return this},enable:function(f){var i=this.options.disabled;if(i!==false){if(f===g)i=false;else{f=this._getIndex(f);i=a.isArray(i)?a.map(i,function(b){return b!==f?b:null}):a.map(this.lis,function(b,h){return h!==f?h:null})}this._setupDisabled(i)}},disable:function(f){var i=this.options.disabled;if(i!==true){if(f===g)i=true;else{f=this._getIndex(f);if(a.inArray(f,i)!==-1)return;i=a.isArray(i)?a.merge([f],i).sort():[f]}this._setupDisabled(i)}},load:function(f,i){f=this._getIndex(f);var b=this,h=this.anchors.eq(f), +k=b._getPanelForTab(h),l={tab:h,panel:k};if(!c(h[0])){if(this.xhr=a.ajax({url:h.attr("href"),beforeSend:function(j,m){return b._trigger("beforeLoad",i,a.extend({jqXHR:j,ajaxSettings:m},l))}})){this.lis.eq(f).addClass("ui-tabs-loading");this.xhr.success(function(j){setTimeout(function(){k.html(j);b._trigger("load",i,l)},1)}).complete(function(j,m){setTimeout(function(){m==="abort"&&b.panels.stop(false,true);b.lis.eq(f).removeClass("ui-tabs-loading");j===b.xhr&&delete b.xhr})})}return this}},_getPanelForTab:function(f){return this.element.find(this._sanitizeSelector("#"+ +a(f).attr("aria-controls")))}});if(a.uiBackCompat!==false){a.ui.tabs.prototype._ui=function(f,i){return{tab:f,panel:i,index:this.anchors.index(f)}};(function(f,i){i.url=function(b,h){this.anchors.eq(b).attr("href",h)}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){f.extend(i.options,{ajaxOptions:null,cache:false});var b=i._create,h=i._setOption,k=i._destroy,l=i.url||f.noop;f.extend(i,{_create:function(){b.call(this);var j=this;this.element.bind("tabsbeforeload.tabs",function(m,n){if(f.data(n.tab[0], +"cache.tabs"))m.preventDefault();else{f.extend(n.ajaxSettings,j.options.ajaxOptions,{error:function(o,p){try{j.options.ajaxOptions.error(o,p,n.tab.closest("li").index(),n.tab[0])}catch(q){}}});n.jqXHR.success(function(){j.options.cache&&f.data(n.tab[0],"cache.tabs",true)})}})},_setOption:function(j,m){j==="cache"&&m===false&&this.anchors.removeData("cache.tabs");h.apply(this,arguments)},_destroy:function(){this.anchors.removeData("cache.tabs");k.call(this)},url:function(j){this.anchors.eq(j).removeData("cache.tabs"); +l.apply(this,arguments)}})})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){i.abort=function(){this.xhr&&this.xhr.abort()}})(jQuery,jQuery.ui.tabs.prototype);a.widget("ui.tabs",a.ui.tabs,{options:{spinner:"Loading…"},_create:function(){this._super("_create");this._bind({tabsbeforeload:function(f,i){if(this.options.spinner){var b=i.tab.find("span"),h=b.html();b.html(this.options.spinner);i.jqXHR.complete(function(){b.html(h)})}}})}});(function(f,i){f.extend(i.options,{enable:null,disable:null}); +var b=i.enable,h=i.disable;i.enable=function(k){var l=this.options,j;if(k&&l.disabled===true||f.isArray(l.disabled)&&f.inArray(k,l.disabled)!==-1)j=true;b.apply(this,arguments);j&&this._trigger("enable",null,this._ui(this.anchors[k],this.panels[k]))};i.disable=function(k){var l=this.options,j;if(k&&l.disabled===false||f.isArray(l.disabled)&&f.inArray(k,l.disabled)===-1)j=true;h.apply(this,arguments);j&&this._trigger("disable",null,this._ui(this.anchors[k],this.panels[k]))}})(jQuery,jQuery.ui.tabs.prototype); +(function(f,i){f.extend(i.options,{add:null,remove:null,tabTemplate:"
  • #{label}
  • "});i.add=function(b,h,k){if(k===g)k=this.anchors.length;var l=this.options;h=f(l.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,h));b=!b.indexOf("#")?b.replace("#",""):this._tabId(h.find("a")[0]);h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);h.find("a").attr("aria-controls",b);var j=k>=this.lis.length,m=this.element.find("#"+b);if(!m.length){m= +this._createPanel(b);if(j)k>0?m.insertAfter(this.panels.eq(-1)):m.appendTo(this.element);else m.insertBefore(this.panels[k])}m.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide();j?h.appendTo(this.list):h.insertBefore(this.lis[k]);l.disabled=f.map(l.disabled,function(n){return n>=k?++n:n});this.refresh();this.lis.length===1&&l.active===false&&this.option("active",0);this._trigger("add",null,this._ui(this.anchors[k],this.panels[k]));return this};i.remove=function(b){b=this._getIndex(b); +var h=this.options,k=this.lis.eq(b).remove(),l=this._getPanelForTab(k.find("a[aria-controls]")).remove();if(k.hasClass("ui-tabs-active")&&this.anchors.length>2)this._activate(b+(b+1=b?--j:j});this.refresh();this._trigger("remove",null,this._ui(k.find("a")[0],l[0]));return this}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){i.length=function(){return this.anchors.length}})(jQuery,jQuery.ui.tabs.prototype); +(function(f,i){f.extend(i.options,{idPrefix:"ui-tabs-"});i._tabId=function(b){return f(b).attr("aria-controls")||b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+ ++d}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){f.extend(i.options,{panelTemplate:"
    "});i._createPanel=function(b){return f(this.options.panelTemplate).attr("id",b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("destroy.tabs",true)}})(jQuery,jQuery.ui.tabs.prototype); +(function(f,i){var b=i._create,h=i._setOption,k=i._eventHandler;i._create=function(){var l=this.options;if(l.active===null&&l.selected!==g)l.active=l.selected===-1?false:l.selected;b.call(this);l.selected=l.active;if(l.selected===false)l.selected=-1};i._setOption=function(l,j){if(l!=="selected")return h.apply(this,arguments);var m=this.options;h.call(this,"active",j===-1?false:j);m.selected=m.active;if(m.selected===false)m.selected=-1};i._eventHandler=function(){k.apply(this,arguments);this.options.selected= +this.options.active;if(this.options.selected===false)this.options.selected=-1}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){f.extend(i.options,{show:null,select:null});var b=i._create,h=i._trigger;i._create=function(){b.call(this);this.options.active!==false&&this._trigger("show",null,this._ui(this.active[0],this._getPanelForTab(this.active)[0]))};i._trigger=function(k,l,j){if(!h.apply(this,arguments))return false;if(k==="beforeActivate"&&j.newTab.length)h.call(this,"select",l,{tab:j.newTab[0], +panel:j.newPanel[0],index:j.newTab.closest("li").index()});else k==="activate"&&j.newTab.length&&h.call(this,"show",l,{tab:j.newTab[0],panel:j.newPanel[0],index:j.newTab.closest("li").index()})}})(jQuery,jQuery.ui.tabs.prototype);(function(f,i){i.select=function(b){b=this._getIndex(b);if(b===-1)if(this.options.collapsible&&this.options.selected!==-1)b=this.options.selected;else return;this.anchors.eq(b).trigger(this.options.event+".tabs")}})(jQuery,jQuery.ui.tabs.prototype);var e=0;a.widget("ui.tabs", +a.ui.tabs,{options:{cookie:null},_create:function(){var f=this.options,i;if(f.active==null&&f.cookie){i=parseInt(this._cookie(),10);if(i===-1)i=false;f.active=i}this._super("_create")},_cookie:function(f){var i=[this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++e)];if(arguments.length){i.push(f===false?-1:f);i.push(this.options.cookie)}return a.cookie.apply(null,i)},_refresh:function(){this._super("_refresh");this.options.cookie&&this._cookie(this.options.active,this.options.cookie)}, +_eventHandler:function(){this._superApply("_eventHandler",arguments);this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_destroy:function(){this._super("_destroy");this.options.cookie&&this._cookie(null,this.options.cookie)}});a.widget("ui.tabs",a.ui.tabs,{_trigger:function(f,i,b){b=a.extend({},b);if(f==="load"){b.panel=b.panel[0];b.tab=b.tab[0]}return this._super("_trigger",f,i,b)}})}})(jQuery); +(function(a){var g=0;a.widget("ui.tooltip",{version:"1.9pre",options:{content:function(){return a(this).attr("title")},hide:true,items:"[title]",position:{my:"left+15 center",at:"right center",collision:"flipfit flipfit"},show:true,tooltipClass:null,close:null,open:null},_create:function(){this._bind({mouseover:"open",focusin:"open"});this.tooltips={}},_setOption:function(d,c){if(d==="disabled"){this[c?"_disable":"_enable"]();this.options[d]=c}else this._super("_setOption",d,c)},_disable:function(){var d= +this;a.each(this.tooltips,function(c,e){var f=a.Event("blur");f.target=f.currentTarget=e[0];d.close(f,true)});this.element.find(this.options.items).andSelf().each(function(){var c=a(this);c.is("[title]")&&c.data("tooltip-title",c.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).andSelf().each(function(){var d=a(this);d.data("tooltip-title")&&d.attr("title",d.data("tooltip-title"))})},open:function(d){var c,e=this,f=a(d?d.target:this.element).closest(this.options.items); +if(!(!f.length||f.attr("aria-describedby"))){f.data("tooltip-title")||f.data("tooltip-title",f.attr("title"));(c=this.options.content.call(f[0],function(i){setTimeout(function(){e._open(d,f,i)},1)}))&&e._open(d,f,c)}},_open:function(d,c,e){if(e){c.is("[title]")&&c.attr("title","");var f=this._find(c);if(!f.length){f=this._tooltip(c);c.attr("aria-describedby",f.attr("id"))}f.find(".ui-tooltip-content").html(e);f.stop(true).position(a.extend({of:c},this.options.position)).hide();this._show(f,this.options.show); +this._trigger("open",d,{tooltip:f});this._bind(c,{mouseleave:"close",blur:"close",keyup:function(i){if(i.keyCode==a.ui.keyCode.ESCAPE){i=a.Event(i);i.currentTarget=c[0];this.close(i,true)}}})}},close:function(d,c){var e=this,f=a(d?d.currentTarget:this.element),i=this._find(f);if(!(!c&&document.activeElement===f[0])){f.data("tooltip-title")&&f.attr("title",f.data("tooltip-title"));f.removeAttr("aria-describedby");i.stop(true);this._hide(i,this.options.hide,function(){a(this).remove();delete e.tooltips[this.id]}); +f.unbind("mouseleave.tooltip blur.tooltip keyup.tooltip");this._trigger("close",d,{tooltip:i})}},_tooltip:function(d){var c="ui-tooltip-"+g++,e=a("
    ").attr({id:c,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));a("
    ").addClass("ui-tooltip-content").appendTo(e);e.appendTo(document.body);a.fn.bgiframe&&e.bgiframe();this.tooltips[c]=d;return e},_find:function(d){return(d=d.attr("aria-describedby"))?a("#"+d):a()},_destroy:function(){a.each(this.tooltips, +function(d){a("#"+d).remove()})}})})(jQuery); diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.js new file mode 100644 index 0000000..cd515f3 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.js @@ -0,0 +1,11767 @@ +/*! + * jQuery UI 1.8.16 + * + * 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( $, undefined ) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ( $.ui.version ) { + return; +} + +$.extend( $.ui, { + version: "1.8.16", + + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + 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 // COMMAND + } +}); + +// plugins +$.fn.extend({ + propAttr: $.fn.prop || $.fn.attr, + + _focus: $.fn.focus, + focus: function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + this._focus.apply( this, arguments ); + }, + + scrollParent: function() { + var scrollParent; + if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } + + return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
    + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + }, + + disableSelection: function() { + return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }, + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + } +}); + +$.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; + if ( border ) { + size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { + var nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + var map = element.parentNode, + mapName = map.name, + img; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) + ? !element.disabled + : "a" == nodeName + ? element.href || isTabIndexNotNaN + : isTabIndexNotNaN) + // the element and all of its ancestors must be visible + && visible( element ); +} + +function visible( element ) { + return !$( element ).parents().andSelf().filter(function() { + return $.curCSS( this, "visibility" ) === "hidden" || + $.expr.filters.hidden( this ); + }).length; +} + +$.extend( $.expr[ ":" ], { + data: function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); + } +}); + +// support +$(function() { + var body = document.body, + div = body.appendChild( div = document.createElement( "div" ) ); + + $.extend( div.style, { + minHeight: "100px", + height: "auto", + padding: 0, + borderWidth: 0 + }); + + $.support.minHeight = div.offsetHeight === 100; + $.support.selectstart = "onselectstart" in div; + + // set display to none to avoid a layout bug in IE + // http://dev.jquery.com/ticket/4014 + body.removeChild( div ).style.display = "none"; +}); + + + + + +// deprecated +$.extend( $.ui, { + // $.ui.plugin is deprecated. Use the proxy pattern instead. + plugin: { + add: function( module, option, set ) { + var proto = $.ui[ module ].prototype; + for ( var i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args ) { + var set = instance.plugins[ name ]; + if ( !set || !instance.element[ 0 ].parentNode ) { + return; + } + + for ( var i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } + }, + + // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() + contains: function( a, b ) { + return document.compareDocumentPosition ? + a.compareDocumentPosition( b ) & 16 : + a !== b && a.contains( b ); + }, + + // only used by resizable + hasScroll: function( el, a ) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + }, + + // these are odd functions, fix the API or move into individual plugins + isOverAxis: function( x, reference, size ) { + //Determines when x coordinate is over "b" element axis + return ( x > reference ) && ( x < ( reference + size ) ); + }, + isOver: function( y, x, top, left, height, width ) { + //Determines when x, y coordinates is over "b" element + return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); + } +}); + +})( jQuery ); +/*! + * jQuery UI Widget 1.8.16 + * + * 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/Widget + */ +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + try { + $( elem ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + _cleanData( elems ); + }; +} else { + var _remove = $.fn.remove; + $.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( [ this ] ).each(function() { + try { + $( this ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); + }; +} + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( true, {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + // TODO: add this back in 1.9 and use $.error() (see #5972) +// if ( !instance ) { +// throw "cannot call methods on " + name + " prior to initialization; " + +// "attempted to call method '" + options + "'"; +// } +// if ( !$.isFunction( instance[options] ) ) { +// throw "no such method '" + options + "' for " + name + " widget instance"; +// } +// var methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + $.data( element, this.widgetName, this ); + this.element = $( element ); + this.options = $.extend( true, {}, + this.options, + this._getCreateOptions(), + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._trigger( "create" ); + this._init(); + }, + _getCreateOptions: function() { + return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, this.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var self = this; + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var callback = this.options[ type ]; + + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + data = data || {}; + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( event.originalEvent ) { + for ( var i = $.event.props.length, prop; i; ) { + prop = $.event.props[ --i ]; + event[ prop ] = event.originalEvent[ prop ]; + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); +/*! + * jQuery UI Mouse 1.8.16 + * + * 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/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var mouseHandled = false; +$( document ).mouseup( function( e ) { + mouseHandled = false; +}); + +$.widget("ui.mouse", { + options: { + cancel: ':input,option', + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var self = this; + + this.element + .bind('mousedown.'+this.widgetName, function(event) { + return self._mouseDown(event); + }) + .bind('click.'+this.widgetName, function(event) { + if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { + $.removeData(event.target, self.widgetName + '.preventClickEvent'); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind('.'+this.widgetName); + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + if( mouseHandled ) { return }; + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var self = this, + btnIsLeft = (event.which == 1), + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + self.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) { + $.removeData(event.target, this.widgetName + '.preventClickEvent'); + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return self._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return self._mouseUp(event); + }; + $(document) + .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { + return this._mouseUp(event); + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + $(document) + .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target == this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + '.preventClickEvent', true); + } + + this._mouseStop(event); + } + + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(event) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(event) {}, + _mouseDrag: function(event) {}, + _mouseStop: function(event) {}, + _mouseCapture: function(event) { return true; } +}); + +})(jQuery); +/* + * jQuery UI Draggable 1.8.16 + * + * 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/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.draggable", $.ui.mouse, { + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false + }, + _create: function() { + + if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) + this.element[0].style.position = 'relative'; + + (this.options.addClasses && this.element.addClass("ui-draggable")); + (this.options.disabled && this.element.addClass("ui-draggable-disabled")); + + this._mouseInit(); + + }, + + destroy: function() { + if(!this.element.data('draggable')) return; + this.element + .removeData("draggable") + .unbind(".draggable") + .removeClass("ui-draggable" + + " ui-draggable-dragging" + + " ui-draggable-disabled"); + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function(event) { + + var o = this.options; + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) + return false; + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) + return false; + + if ( o.iframeFix ) { + $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { + $('
    ') + .css({ + width: this.offsetWidth+"px", height: this.offsetHeight+"px", + position: "absolute", opacity: "0.001", zIndex: 1000 + }) + .css($(this).offset()) + .appendTo("body"); + }); + } + + return true; + + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css("position"); + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.positionAbs = this.element.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + //Trigger event + callbacks + if(this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.helper.addClass("ui-draggable-dragging"); + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + + //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) + if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event); + + return true; + }, + + _mouseDrag: function(event, noPropagation) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if(this._trigger('drag', event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) + dropped = $.ui.ddmanager.drop(this, event); + + //if a drop comes from outside (a sortable) + if(this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + //if the original element is removed, don't bother to continue if helper is set to "original" + if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original") + return false; + + if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + var self = this; + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if(self._trigger("stop", event) !== false) { + self._clear(); + } + }); + } else { + if(this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + _mouseUp: function(event) { + if (this.options.iframeFix === true) { + $("div.ui-draggable-iframeFix").each(function() { + this.parentNode.removeChild(this); + }); //Remove frame helpers + } + + //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) + if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event); + + return $.ui.mouse.prototype._mouseUp.call(this, event); + }, + + cancel: function() { + + if(this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + + var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; + $(this.options.handle, this.element) + .find("*") + .andSelf() + .each(function() { + if(this == event.target) handle = true; + }); + + return handle; + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); + + if(!helper.parents('body').length) + helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); + + if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) + helper.css("position", "absolute"); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.element.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"),10) || 0), + top: (parseInt(this.element.css("marginTop"),10) || 0), + 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 o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, + o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, + (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { + var c = $(o.containment); + var ce = c[0]; if(!ce) return; + var co = c.offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0), + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0), + (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, + (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom + ]; + this.relative_container = c; + + } else if(o.containment.constructor == Array) { + this.containment = o.containment; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + var containment; + if(this.containment) { + if (this.relative_container){ + var co = this.relative_container.offset(); + containment = [ this.containment[0] + co.left, + this.containment[1] + co.top, + this.containment[2] + co.left, + this.containment[3] + co.top ]; + } + else { + containment = this.containment; + } + + if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; + } + + if(o.grid) { + //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) + var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; + pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; + pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); + //if($.ui.ddmanager) $.ui.ddmanager.current = null; + this.helper = null; + this.cancelHelperRemoval = false; + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function(type, event, ui) { + ui = ui || this._uiHash(); + $.ui.plugin.call(this, type, [event, ui]); + if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins + return $.Widget.prototype._trigger.call(this, type, event, ui); + }, + + plugins: {}, + + _uiHash: function(event) { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.extend($.ui.draggable, { + version: "1.8.16" +}); + +$.ui.plugin.add("draggable", "connectToSortable", { + start: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options, + uiSortable = $.extend({}, ui, { item: inst.element }); + inst.sortables = []; + $(o.connectToSortable).each(function() { + var sortable = $.data(this, 'sortable'); + if (sortable && !sortable.options.disabled) { + inst.sortables.push({ + instance: sortable, + shouldRevert: sortable.options.revert + }); + sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page). + sortable._trigger("activate", event, uiSortable); + } + }); + + }, + stop: function(event, ui) { + + //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper + var inst = $(this).data("draggable"), + uiSortable = $.extend({}, ui, { item: inst.element }); + + $.each(inst.sortables, function() { + if(this.instance.isOver) { + + this.instance.isOver = 0; + + inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance + this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + + //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' + if(this.shouldRevert) this.instance.options.revert = true; + + //Trigger the stop of the sortable + this.instance._mouseStop(event); + + this.instance.options.helper = this.instance.options._helper; + + //If the helper has been the original item, restore properties in the sortable + if(inst.options.helper == 'original') + this.instance.currentItem.css({ top: 'auto', left: 'auto' }); + + } else { + this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance + this.instance._trigger("deactivate", event, uiSortable); + } + + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), self = this; + + var checkPos = function(o) { + var dyClick = this.offset.click.top, dxClick = this.offset.click.left; + var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; + var itemHeight = o.height, itemWidth = o.width; + var itemTop = o.top, itemLeft = o.left; + + return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); + }; + + $.each(inst.sortables, function(i) { + + //Copy over some variables to allow calling the sortable's native _intersectsWith + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + + if(this.instance._intersectsWith(this.instance.containerCache)) { + + //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once + if(!this.instance.isOver) { + + this.instance.isOver = 1; + //Now we fake the start of dragging for the sortable instance, + //by cloning the list group item, appending it to the sortable and using it as inst.currentItem + //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) + this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); + this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it + this.instance.options.helper = function() { return ui.helper[0]; }; + + event.target = this.instance.currentItem[0]; + this.instance._mouseCapture(event, true); + this.instance._mouseStart(event, true, true); + + //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes + this.instance.offset.click.top = inst.offset.click.top; + this.instance.offset.click.left = inst.offset.click.left; + this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; + this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + + inst._trigger("toSortable", event); + inst.dropped = this.instance.element; //draggable revert needs that + //hack so receive/update callbacks work (mostly) + inst.currentItem = inst.element; + this.instance.fromOutside = inst; + + } + + //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable + if(this.instance.currentItem) this.instance._mouseDrag(event); + + } else { + + //If it doesn't intersect with the sortable, and it intersected before, + //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval + if(this.instance.isOver) { + + this.instance.isOver = 0; + this.instance.cancelHelperRemoval = true; + + //Prevent reverting on this forced stop + this.instance.options.revert = false; + + // The out event needs to be triggered independently + this.instance._trigger('out', event, this.instance._uiHash(this.instance)); + + this.instance._mouseStop(event, true); + this.instance.options.helper = this.instance.options._helper; + + //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size + this.instance.currentItem.remove(); + if(this.instance.placeholder) this.instance.placeholder.remove(); + + inst._trigger("fromSortable", event); + inst.dropped = false; //draggable revert needs that + } + + }; + + }); + + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function(event, ui) { + var t = $('body'), o = $(this).data('draggable').options; + if (t.css("cursor")) o._cursor = t.css("cursor"); + t.css("cursor", o.cursor); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if (o._cursor) $('body').css("cursor", o._cursor); + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data('draggable').options; + if(t.css("opacity")) o._opacity = t.css("opacity"); + t.css('opacity', o.opacity); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if(o._opacity) $(ui.helper).css('opacity', o._opacity); + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function(event, ui) { + var i = $(this).data("draggable"); + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); + }, + drag: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options, scrolled = false; + + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { + + if(!o.axis || o.axis != 'x') { + if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if(!o.axis || o.axis != 'y') { + if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(!o.axis || o.axis != 'x') { + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + + if(!o.axis || o.axis != 'y') { + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(i, event); + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options; + i.snapElements = []; + + $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { + var $t = $(this); var $o = $t.offset(); + if(this != i.element[0]) i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options; + var d = o.snapTolerance; + + var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (var i = inst.snapElements.length - 1; i >= 0; i--){ + + var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, + t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; + + //Yes, I know, this is insane ;) + if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { + if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = false; + continue; + } + + if(o.snapMode != 'inner') { + var ts = Math.abs(t - y2) <= d; + var bs = Math.abs(b - y1) <= d; + var ls = Math.abs(l - x2) <= d; + var rs = Math.abs(r - x1) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + } + + var first = (ts || bs || ls || rs); + + if(o.snapMode != 'outer') { + var ts = Math.abs(t - y1) <= d; + var bs = Math.abs(b - y2) <= d; + var ls = Math.abs(l - x1) <= d; + var rs = Math.abs(r - x2) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + } + + if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + }; + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function(event, ui) { + + var o = $(this).data("draggable").options; + + var group = $.makeArray($(o.stack)).sort(function(a,b) { + return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); + }); + if (!group.length) { return; } + + var min = parseInt(group[0].style.zIndex) || 0; + $(group).each(function(i) { + this.style.zIndex = min + i; + }); + + this[0].style.zIndex = min + group.length; + + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("draggable").options; + if(t.css("zIndex")) o._zIndex = t.css("zIndex"); + t.css('zIndex', o.zIndex); + }, + stop: function(event, ui) { + var o = $(this).data("draggable").options; + if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); + } +}); + +})(jQuery); +/* + * jQuery UI Droppable 1.8.16 + * + * 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/Droppables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.mouse.js + * jquery.ui.draggable.js + */ +(function( $, undefined ) { + +$.widget("ui.droppable", { + widgetEventPrefix: "drop", + options: { + accept: '*', + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: 'default', + tolerance: 'intersect' + }, + _create: function() { + + var o = this.options, accept = o.accept; + this.isover = 0; this.isout = 1; + + this.accept = $.isFunction(accept) ? accept : function(d) { + return d.is(accept); + }; + + //Store the droppable's proportions + this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; + + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; + $.ui.ddmanager.droppables[o.scope].push(this); + + (o.addClasses && this.element.addClass("ui-droppable")); + + }, + + destroy: function() { + var drop = $.ui.ddmanager.droppables[this.options.scope]; + for ( var i = 0; i < drop.length; i++ ) + if ( drop[i] == this ) + drop.splice(i, 1); + + this.element + .removeClass("ui-droppable ui-droppable-disabled") + .removeData("droppable") + .unbind(".droppable"); + + return this; + }, + + _setOption: function(key, value) { + + if(key == 'accept') { + this.accept = $.isFunction(value) ? value : function(d) { + return d.is(value); + }; + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + + _activate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.addClass(this.options.activeClass); + (draggable && this._trigger('activate', event, this.ui(draggable))); + }, + + _deactivate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + (draggable && this._trigger('deactivate', event, this.ui(draggable))); + }, + + _over: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); + this._trigger('over', event, this.ui(draggable)); + } + + }, + + _out: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('out', event, this.ui(draggable)); + } + + }, + + _drop: function(event,custom) { + + var draggable = custom || $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element + + var childrenIntersection = false; + this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { + var inst = $.data(this, 'droppable'); + if( + inst.options.greedy + && !inst.options.disabled + && inst.options.scope == draggable.options.scope + && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) + && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) + ) { childrenIntersection = true; return false; } + }); + if(childrenIntersection) return false; + + if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('drop', event, this.ui(draggable)); + return this.element; + } + + return false; + + }, + + ui: function(c) { + return { + draggable: (c.currentItem || c.element), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.extend($.ui.droppable, { + version: "1.8.16" +}); + +$.ui.intersect = function(draggable, droppable, toleranceMode) { + + if (!droppable.offset) return false; + + var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, + y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; + var l = droppable.offset.left, r = l + droppable.proportions.width, + t = droppable.offset.top, b = t + droppable.proportions.height; + + switch (toleranceMode) { + case 'fit': + return (l <= x1 && x2 <= r + && t <= y1 && y2 <= b); + break; + case 'intersect': + return (l < x1 + (draggable.helperProportions.width / 2) // Right Half + && x2 - (draggable.helperProportions.width / 2) < r // Left Half + && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half + && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half + break; + case 'pointer': + var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), + draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), + isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); + return isOver; + break; + case 'touch': + return ( + (y1 >= t && y1 <= b) || // Top edge touching + (y2 >= t && y2 <= b) || // Bottom edge touching + (y1 < t && y2 > b) // Surrounded vertically + ) && ( + (x1 >= l && x1 <= r) || // Left edge touching + (x2 >= l && x2 <= r) || // Right edge touching + (x1 < l && x2 > r) // Surrounded horizontally + ); + break; + default: + return false; + break; + } + +}; + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { 'default': [] }, + prepareOffsets: function(t, event) { + + var m = $.ui.ddmanager.droppables[t.options.scope] || []; + var type = event ? event.type : null; // workaround for #2317 + var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); + + droppablesLoop: for (var i = 0; i < m.length; i++) { + + if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted + for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item + m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue + + if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables + + m[i].offset = m[i].element.offset(); + m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; + + } + + }, + drop: function(draggable, event) { + + var dropped = false; + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(!this.options) return; + if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) + dropped = dropped || this._drop.call(this, event); + + if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + this.isout = 1; this.isover = 0; + this._deactivate.call(this, event); + } + + }); + return dropped; + + }, + dragStart: function( draggable, event ) { + //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003) + draggable.element.parents( ":not(body,html)" ).bind( "scroll.droppable", function() { + if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); + }); + }, + drag: function(draggable, event) { + + //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); + + //Run through all droppables and check their positions based on specific tolerance options + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(this.options.disabled || this.greedyChild || !this.visible) return; + var intersects = $.ui.intersect(draggable, this, this.options.tolerance); + + var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); + if(!c) return; + + var parentInstance; + if (this.options.greedy) { + var parent = this.element.parents(':data(droppable):eq(0)'); + if (parent.length) { + parentInstance = $.data(parent[0], 'droppable'); + parentInstance.greedyChild = (c == 'isover' ? 1 : 0); + } + } + + // we just moved into a greedy child + if (parentInstance && c == 'isover') { + parentInstance['isover'] = 0; + parentInstance['isout'] = 1; + parentInstance._out.call(parentInstance, event); + } + + this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; + this[c == "isover" ? "_over" : "_out"].call(this, event); + + // we just moved out of a greedy child + if (parentInstance && c == 'isout') { + parentInstance['isout'] = 0; + parentInstance['isover'] = 1; + parentInstance._over.call(parentInstance, event); + } + }); + + }, + dragStop: function( draggable, event ) { + draggable.element.parents( ":not(body,html)" ).unbind( "scroll.droppable" ); + //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003) + if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); + } +}; + +})(jQuery); +/* + * jQuery UI Resizable 1.8.16 + * + * 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/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.resizable", $.ui.mouse, { + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + zIndex: 1000 + }, + _create: function() { + + var self = this, o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null + }); + + //Wrap the element if it cannot hold child nodes + if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + + //Opera fix for relative positioning + if (/relative/.test(this.element.css('position')) && $.browser.opera) + this.element.css({ position: 'relative', top: 'auto', left: 'auto' }); + + //Create a wrapper element and set the wrapper to the new current internal element + this.element.wrap( + $('
    ').css({ + position: this.element.css('position'), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css('top'), + left: this.element.css('left') + }) + ); + + //Overwrite the original this.element + this.element = this.element.parent().data( + "resizable", this.element.data('resizable') + ); + + this.elementIsWrapper = true; + + //Move margins to the wrapper + 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}); + + //Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css('resize'); + this.originalElement.css('resize', 'none'); + + //Push the actual element to our proportionallyResize internal array + this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); + + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css('margin') }); + + // fix handlers offset + this._proportionallyResize(); + + } + + this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); + if(this.handles.constructor == String) { + + if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; + var n = this.handles.split(","); this.handles = {}; + + for(var i = 0; i < n.length; i++) { + + var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; + var axis = $('
    '); + + // increase zIndex of sw, se, ne, nw axis + //TODO : this modifies original option + if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex }); + + //TODO : What's going on here? + if ('se' == handle) { + axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); + }; + + //Insert into internal handles object and append to element + this.handles[handle] = '.ui-resizable-'+handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + target = target || this.element; + + for(var i in this.handles) { + + if(this.handles[i].constructor == String) + this.handles[i] = $(this.handles[i], this.element).show(); + + //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { + + var axis = $(this.handles[i], this.element), padWrapper = 0; + + //Checking the correct pad and border + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + //The padding type i have to apply... + var padPos = [ 'padding', + /ne|nw|n/.test(i) ? 'Top' : + /se|sw|s/.test(i) ? 'Bottom' : + /^e$/.test(i) ? 'Right' : 'Left' ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + + } + + //TODO: What's that good for? There's not anything to be executed left + if(!$(this.handles[i]).length) + continue; + + } + }; + + //TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = $('.ui-resizable-handle', this.element) + .disableSelection(); + + //Matching axis name + this._handles.mouseover(function() { + if (!self.resizing) { + if (this.className) + var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + //Axis, default = se + self.axis = axis && axis[1] ? axis[1] : 'se'; + } + }); + + //If we want to auto hide the elements + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .hover(function() { + if (o.disabled) return; + $(this).removeClass("ui-resizable-autohide"); + self._handles.show(); + }, + function(){ + if (o.disabled) return; + if (!self.resizing) { + $(this).addClass("ui-resizable-autohide"); + self._handles.hide(); + } + }); + } + + //Initialize the mouse interaction + this._mouseInit(); + + }, + + destroy: function() { + + this._mouseDestroy(); + + var _destroy = function(exp) { + $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); + }; + + //TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + var wrapper = this.element; + wrapper.after( + this.originalElement.css({ + position: wrapper.css('position'), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css('top'), + left: wrapper.css('left') + }) + ).remove(); + } + + this.originalElement.css('resize', this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var handle = false; + for (var i in this.handles) { + if ($(this.handles[i])[0] == event.target) { + handle = true; + } + } + + return !this.options.disabled && handle; + }, + + _mouseStart: function(event) { + + var o = this.options, iniPos = this.element.position(), el = this.element; + + this.resizing = true; + this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; + + // bugfix for http://dev.jquery.com/ticket/1749 + if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { + el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); + } + + //Opera fixing relative position + if ($.browser.opera && (/relative/).test(el.css('position'))) + el.css({ position: 'relative', top: 'auto', left: 'auto' }); + + this._renderProxy(); + + var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + //Store needed variables + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalPosition = { left: curleft, top: curtop }; + this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + //Aspect Ratio + this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + + var cursor = $('.ui-resizable-' + this.axis).css('cursor'); + $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + //Increase performance, avoid regex + var el = this.helper, o = this.options, props = {}, + self = this, smp = this.originalMousePosition, a = this.axis; + + var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; + var trigger = this._change[a]; + if (!trigger) return false; + + // Calculate the attrs that will be change + var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; + + // Put this in the mouseDrag handler since the user can start pressing shift while resizing + this._updateVirtualBoundaries(event.shiftKey); + if (this._aspectRatio || event.shiftKey) + data = this._updateRatio(data, event); + + data = this._respectSize(data, event); + + // plugins callbacks need to be called first + this._propagate("resize", event); + + el.css({ + top: this.position.top + "px", left: this.position.left + "px", + width: this.size.width + "px", height: this.size.height + "px" + }); + + if (!this._helper && this._proportionallyResizeElements.length) + this._proportionallyResize(); + + this._updateCache(data); + + // calling the user callback at the end + this._trigger('resize', event, this.ui()); + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var o = this.options, self = this; + + if(this._helper) { + var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + if (!o.animate) + this.element.css($.extend(s, { top: top, left: left })); + + self.helper.height(self.size.height); + self.helper.width(self.size.width); + + if (this._helper && !o.animate) this._proportionallyResize(); + } + + $('body').css('cursor', 'auto'); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) this.helper.remove(); + return false; + + }, + + _updateVirtualBoundaries: function(forceAspectRatio) { + var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b; + + b = { + minWidth: isNumber(o.minWidth) ? o.minWidth : 0, + maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity, + minHeight: isNumber(o.minHeight) ? o.minHeight : 0, + maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity + }; + + if(this._aspectRatio || forceAspectRatio) { + // We want to create an enclosing box whose aspect ration is the requested one + // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension + pMinWidth = b.minHeight * this.aspectRatio; + pMinHeight = b.minWidth / this.aspectRatio; + pMaxWidth = b.maxHeight * this.aspectRatio; + pMaxHeight = b.maxWidth / this.aspectRatio; + + if(pMinWidth > b.minWidth) b.minWidth = pMinWidth; + if(pMinHeight > b.minHeight) b.minHeight = pMinHeight; + if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth; + if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight; + } + this._vBoundaries = b; + }, + + _updateCache: function(data) { + var o = this.options; + this.offset = this.helper.offset(); + if (isNumber(data.left)) this.position.left = data.left; + if (isNumber(data.top)) this.position.top = data.top; + if (isNumber(data.height)) this.size.height = data.height; + if (isNumber(data.width)) this.size.width = data.width; + }, + + _updateRatio: function(data, event) { + + var o = this.options, cpos = this.position, csize = this.size, a = this.axis; + + if (isNumber(data.height)) data.width = (data.height * this.aspectRatio); + else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio); + + if (a == 'sw') { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a == 'nw') { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function(data, event) { + + var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, + ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); + + if (isminw) data.width = o.minWidth; + if (isminh) data.height = o.minHeight; + if (ismaxw) data.width = o.maxWidth; + if (ismaxh) data.height = o.maxHeight; + + var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; + var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + + if (isminw && cw) data.left = dw - o.minWidth; + if (ismaxw && cw) data.left = dw - o.maxWidth; + if (isminh && ch) data.top = dh - o.minHeight; + if (ismaxh && ch) data.top = dh - o.maxHeight; + + // fixing jump error on top/left - bug #2330 + var isNotwh = !data.width && !data.height; + if (isNotwh && !data.left && data.top) data.top = null; + else if (isNotwh && !data.top && data.left) data.left = null; + + return data; + }, + + _proportionallyResize: function() { + + var o = this.options; + if (!this._proportionallyResizeElements.length) return; + var element = this.helper || this.element; + + for (var i=0; i < this._proportionallyResizeElements.length; i++) { + + var prel = this._proportionallyResizeElements[i]; + + if (!this.borderDif) { + var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], + p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; + + this.borderDif = $.map(b, function(v, i) { + var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; + return border + padding; + }); + } + + if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) + continue; + + prel.css({ + height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, + width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 + }); + + }; + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if(this._helper) { + + this.helper = this.helper || $('
    '); + + // fix ie6 offset TODO: This seems broken + var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), + pxyoffset = ( ie6 ? 2 : -1 ); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() + pxyoffset, + height: this.element.outerHeight() + pxyoffset, + position: 'absolute', + left: this.elementOffset.left - ie6offset +'px', + top: this.elementOffset.top - ie6offset +'px', + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx, dy) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [event, this.ui()]); + (n != "resize" && this._trigger(n, event, 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 + }; + } + +}); + +$.extend($.ui.resizable, { + version: "1.8.16" +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _store = function (exp) { + $(exp).each(function() { + var el = $(this); + el.data("resizable-alsoresize", { + width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), + left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10), + position: el.css('position') // to reset Opera on stop() + }); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { + if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } + else { $.each(o.alsoResize, function (exp) { _store(exp); }); } + }else{ + _store(o.alsoResize); + } + }, + + resize: function (event, ui) { + var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; + + var delta = { + height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, + top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 + }, + + _alsoResize = function (exp, c) { + $(exp).each(function() { + var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, + css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; + + $.each(css, function (i, prop) { + var sum = (start[prop]||0) + (delta[prop]||0); + if (sum && sum >= 0) + style[prop] = sum || null; + }); + + // Opera fixing relative position + if ($.browser.opera && /relative/.test(el.css('position'))) { + self._revertToRelativePosition = true; + el.css({ position: 'absolute', top: 'auto', left: 'auto' }); + } + + el.css(style); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); + }else{ + _alsoResize(o.alsoResize); + } + }, + + stop: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _reset = function (exp) { + $(exp).each(function() { + var el = $(this); + // reset position for Opera - no need to verify it was changed + el.css({ position: el.data("resizable-alsoresize").position }); + }); + }; + + if (self._revertToRelativePosition) { + self._revertToRelativePosition = false; + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp) { _reset(exp); }); + }else{ + _reset(o.alsoResize); + } + } + + $(this).removeData("resizable-alsoresize"); + } +}); + +$.ui.plugin.add("resizable", "animate", { + + stop: function(event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + self.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(self.element.css('width'), 10), + height: parseInt(self.element.css('height'), 10), + top: parseInt(self.element.css('top'), 10), + left: parseInt(self.element.css('left'), 10) + }; + + if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); + + // propagating resize, and updating values for each animation step + self._updateCache(data); + self._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add("resizable", "containment", { + + start: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, el = self.element; + var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; + if (!ce) return; + + self.containerElement = $(ce); + + if (/document/.test(oc) || oc == document) { + self.containerOffset = { left: 0, top: 0 }; + self.containerPosition = { left: 0, top: 0 }; + + self.parentData = { + element: $(document), left: 0, top: 0, + width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight + }; + } + + // i'm a node, so compute top, left, right, bottom + else { + var element = $(ce), p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); + + self.containerOffset = element.offset(); + self.containerPosition = element.position(); + self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; + + var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, + width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); + + self.parentData = { + element: ce, left: co.left, top: co.top, width: width, height: height + }; + } + }, + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, + ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, + pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; + + if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; + + if (cp.left < (self._helper ? co.left : 0)) { + self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); + if (pRatio) self.size.height = self.size.width / o.aspectRatio; + self.position.left = o.helper ? co.left : 0; + } + + if (cp.top < (self._helper ? co.top : 0)) { + self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); + if (pRatio) self.size.width = self.size.height * o.aspectRatio; + self.position.top = self._helper ? co.top : 0; + } + + self.offset.left = self.parentData.left+self.position.left; + self.offset.top = self.parentData.top+self.position.top; + + var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), + hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); + + var isParent = self.containerElement.get(0) == self.element.parent().get(0), + isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); + + if(isParent && isOffsetRelative) woset -= self.parentData.left; + + if (woset + self.size.width >= self.parentData.width) { + self.size.width = self.parentData.width - woset; + if (pRatio) self.size.height = self.size.width / self.aspectRatio; + } + + if (hoset + self.size.height >= self.parentData.height) { + self.size.height = self.parentData.height - hoset; + if (pRatio) self.size.width = self.size.height * self.aspectRatio; + } + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options, cp = self.position, + co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; + + var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; + + if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + if (self._helper && !o.animate && (/static/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function(event, ui) { + + var self = $(this).data("resizable"), o = self.options, cs = self.size; + + self.ghost = self.originalElement.clone(); + self.ghost + .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) + .addClass('ui-resizable-ghost') + .addClass(typeof o.ghost == 'string' ? o.ghost : ''); + + self.ghost.appendTo(self.helper); + + }, + + resize: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; + o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; + var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); + + if (/^(se|s|e)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + } + else if (/^(ne)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + } + else if (/^(sw)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.left = op.left - ox; + } + else { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + self.position.left = op.left - ox; + } + } + +}); + +var num = function(v) { + return parseInt(v, 10) || 0; +}; + +var isNumber = function(value) { + return !isNaN(parseInt(value, 10)); +}; + +})(jQuery); +/* + * jQuery UI Selectable 1.8.16 + * + * 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/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.selectable", $.ui.mouse, { + options: { + appendTo: 'body', + autoRefresh: true, + distance: 0, + filter: '*', + tolerance: 'touch' + }, + _create: function() { + var self = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + var selectees; + this.refresh = function() { + selectees = $(self.options.filter, self.element[0]); + selectees.each(function() { + var $this = $(this); + var pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass('ui-selected'), + selecting: $this.hasClass('ui-selecting'), + unselecting: $this.hasClass('ui-unselecting') + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("
    "); + }, + + 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(event) { + var self = this; + + this.opos = [event.pageX, event.pageY]; + + if (this.options.disabled) + return; + + var options = this.options; + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "left": event.clientX, + "top": event.clientY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter('.ui-selected').each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().andSelf().each(function() { + var selectee = $.data(this, "selectable-item"); + if (selectee) { + var doSelect = !event.metaKey || !selectee.$element.hasClass('ui-selected'); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + self._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + var self = this; + this.dragged = true; + + if (this.options.disabled) + return; + + var options = this.options; + + var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; + if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"); + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element == self.element[0]) + return; + var hit = false; + if (options.tolerance == 'touch') { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance == 'fit') { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass('ui-selecting'); + selectee.selecting = true; + // selectable SELECTING callback + self._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if (event.metaKey && selectee.startselected) { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + selectee.$element.addClass('ui-selected'); + selectee.selected = true; + } else { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !selectee.startselected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var self = this; + + this.dragged = false; + + var options = this.options; + + $('.ui-unselecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + selectee.startselected = false; + self._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $('.ui-selecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + self._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + +$.extend($.ui.selectable, { + version: "1.8.16" +}); + +})(jQuery); +/* + * jQuery UI Sortable 1.8.16 + * + * 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/Sortables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.sortable", $.ui.mouse, { + widgetEventPrefix: "sort", + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: 'auto', + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: '> *', + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000 + }, + _create: function() { + + var o = this.options; + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine if the items are being displayed horizontally + this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false; + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + }, + + destroy: function() { + this.element + .removeClass("ui-sortable ui-sortable-disabled") + .removeData("sortable") + .unbind(".sortable"); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) + this.items[i].item.removeData("sortable-item"); + + return this; + }, + + _setOption: function(key, value){ + if ( key === "disabled" ) { + this.options[ key ] = value; + + this.widget() + [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); + } else { + // Don't call widget base _setOption for disable as it adds ui-state-disabled class + $.Widget.prototype._setOption.apply(this, arguments); + } + }, + + _mouseCapture: function(event, overrideHandle) { + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type == 'static') return false; + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { + if($.data(this, 'sortable-item') == self) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target); + + if(!currentItem) return false; + if(this.options.handle && !overrideHandle) { + var validHandle = false; + + $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); + if(!validHandle) return false; + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var o = this.options, self = this; + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] != this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + if(o.cursor) { // cursor option + if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); + $('body').css("cursor", o.cursor); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') + this.overflowOffset = this.scrollParent.offset(); + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) + this._cacheHelperProportions(); + + + //Post 'activate' events to possible containers + if(!noActivation) { + for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } + } + + //Prepare possible droppables + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + var o = this.options, scrolled = false; + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + + } else { + + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper 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'; + + //Rearrange + for (var i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); + if (!intersection) continue; + + if(itemElement != this.currentItem[0] //cannot intersect with itself + && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before + && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked + && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) + //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container + ) { + + this.direction = intersection == 1 ? "down" : "up"; + + if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + //Call callbacks + this._trigger('sort', event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) return; + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) + $.ui.ddmanager.drop(this, event); + + if(this.options.revert) { + var self = this; + var cur = self.placeholder.offset(); + + self.reverting = true; + + $(this.helper).animate({ + left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), + top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) + }, parseInt(this.options.revert, 10) || 500, function() { + self._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + var self = this; + + if(this.dragging) { + + this._mouseUp({ target: null }); + + if(this.options.helper == "original") + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + else + this.currentItem.show(); + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, self._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, self._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + if (this.placeholder) { + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var str = []; o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); + if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); + }); + + if(!str.length && o.key) { + str.push(o.key + '='); + } + + return str.join('&'); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var ret = []; o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height; + + var l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height; + + var dyClick = this.offset.click.top, + dxClick = this.offset.click.left; + + var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; + + if( this.options.tolerance == "pointer" + || this.options.forcePointerForContainers + || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) // Right Half + && x2 - (this.helperProportions.width / 2) < r // Left Half + && t < y1 + (this.helperProportions.height / 2) // Bottom Half + && y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) + return false; + + return this.floating ? + ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta != 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta != 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor == String + ? [options.connectWith] + : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var self = this; + var items = []; + var queries = []; + var connectWith = this._connectWith(); + + if(connectWith && connected) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); + } + }; + }; + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); + + for (var i = queries.length - 1; i >= 0; i--){ + queries[i][0].each(function() { + items.push(this); + }); + }; + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(sortable-item)"); + + for (var i=0; i < this.items.length; i++) { + + for (var j=0; j < list.length; j++) { + if(list[j] == this.items[i].item[0]) + this.items.splice(i,1); + }; + + }; + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + var items = this.items; + var self = this; + var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; + var connectWith = this._connectWith(); + + if(connectWith) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], 'sortable'); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + }; + }; + } + + for (var i = queries.length - 1; i >= 0; i--) { + var targetData = queries[i][1]; + var _queries = queries[i][0]; + + for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { + var item = $(_queries[j]); + + item.data('sortable-item', targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + }; + }; + + }, + + refreshPositions: function(fast) { + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + for (var i = this.items.length - 1; i >= 0; i--){ + var item = this.items[i]; + + //We ignore calculating positions of all connected containers when we're not over them + if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) + continue; + + var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + var p = t.offset(); + item.left = p.left; + item.top = p.top; + }; + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (var i = this.containers.length - 1; i >= 0; i--){ + var p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + }; + } + + return this; + }, + + _createPlaceholder: function(that) { + + var self = that || this, o = self.options; + + if(!o.placeholder || o.placeholder.constructor == String) { + var className = o.placeholder; + o.placeholder = { + element: function() { + + var el = $(document.createElement(self.currentItem[0].nodeName)) + .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper")[0]; + + if(!className) + el.style.visibility = "hidden"; + + return el; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) return; + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; + if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; + } + }; + } + + //Create the placeholder + self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); + + //Append it after the actual current item + self.currentItem.after(self.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(self, self.placeholder); + + }, + + _contactContainers: function(event) { + + // get innermost container that intersects with item + var innermostContainer = null, innermostIndex = null; + + + for (var i = this.containers.length - 1; i >= 0; i--){ + + // never consider a container that's located within the item itself + if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) + continue; + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) + continue; + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) return; + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } else if(this.currentContainer != this.containers[innermostIndex]) { + + //When entering a new container, we will find the item with the least distance and append our item near it + var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; + for (var j = this.items.length - 1; j >= 0; j--) { + if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; + var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; + if(Math.abs(cur - base) < dist) { + dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; + } + } + + if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled + return; + + this.currentContainer = this.containers[innermostIndex]; + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); + + if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already + $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + + if(helper[0] == this.currentItem[0]) + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + + if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); + if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment)) { + var ce = $(o.containment)[0]; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var self = this, counter = this.counter; + + window.setTimeout(function() { + if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + },0); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var delayedTriggers = [], self = this; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem); + this._noFinalSort = null; + + if(this.helper[0] == this.currentItem[0]) { + for(var i in this._storedCSS) { + if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element + if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + for (var i = this.containers.length - 1; i >= 0; i--){ + if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + } + }; + }; + + //Post events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + if(this.containers[i].containerCache.over) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor + if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity + if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index + + this.dragging = false; + if(this.cancelHelperRemoval) { + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + return false; + } + + if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; + + if(!noPropagation) { + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return true; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(inst) { + var self = inst || this; + return { + helper: self.helper, + placeholder: self.placeholder || $([]), + position: self.position, + originalPosition: self.originalPosition, + offset: self.positionAbs, + item: self.currentItem, + sender: inst ? inst.element : null + }; + } + +}); + +$.extend($.ui.sortable, { + version: "1.8.16" +}); + +})(jQuery); +/* + * jQuery UI Effects 1.8.16 + * + * 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/Effects/ + */ +;jQuery.effects || (function($, undefined) { + +$.effects = {}; + + + +/******************************************************************************/ +/****************************** COLOR ANIMATIONS ******************************/ +/******************************************************************************/ + +// override the animation for color styles +$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', + 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], +function(i, attr) { + $.fx.step[attr] = function(fx) { + if (!fx.colorInit) { + fx.start = getColor(fx.elem, attr); + fx.end = getRGB(fx.end); + fx.colorInit = true; + } + + fx.elem.style[attr] = 'rgb(' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors['transparent']; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ + +var classAnimationActions = ['add', 'remove', 'toggle'], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +function getElementStyles() { + var style = document.defaultView + ? document.defaultView.getComputedStyle(this, null) + : this.currentStyle, + newStyle = {}, + key, + camelCase; + + // webkit enumerates style porperties + if (style && style.length && style[0] && style[style[0]]) { + var len = style.length; + while (len--) { + key = style[len]; + if (typeof style[key] == 'string') { + camelCase = key.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + newStyle[camelCase] = style[key]; + } + } + } else { + for (key in style) { + if (typeof style[key] === 'string') { + newStyle[key] = style[key]; + } + } + } + + return newStyle; +} + +function filterStyles(styles) { + var name, value; + for (name in styles) { + value = styles[name]; + if ( + // ignore null and undefined values + value == null || + // ignore functions (when does this occur?) + $.isFunction(value) || + // shorthand styles that need to be expanded + name in shorthandStyles || + // ignore scrollbars (break in IE) + (/scrollbar/).test(name) || + + // only colors or values that can be converted to numbers + (!(/color/i).test(name) && isNaN(parseFloat(value))) + ) { + delete styles[name]; + } + } + + return styles; +} + +function styleDifference(oldStyle, newStyle) { + var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 + name; + + for (name in newStyle) { + if (oldStyle[name] != newStyle[name]) { + diff[name] = newStyle[name]; + } + } + + return diff; +} + +$.effects.animateClass = function(value, duration, easing, callback) { + if ($.isFunction(easing)) { + callback = easing; + easing = null; + } + + return this.queue(function() { + var that = $(this), + originalStyleAttr = that.attr('style') || ' ', + originalStyle = filterStyles(getElementStyles.call(this)), + newStyle, + className = that.attr('class'); + + $.each(classAnimationActions, function(i, action) { + if (value[action]) { + that[action + 'Class'](value[action]); + } + }); + newStyle = filterStyles(getElementStyles.call(this)); + that.attr('class', className); + + that.animate(styleDifference(originalStyle, newStyle), { + queue: false, + duration: duration, + easing: easing, + complete: function() { + $.each(classAnimationActions, function(i, action) { + if (value[action]) { that[action + 'Class'](value[action]); } + }); + // work around bug in IE by clearing the cssText before setting it + if (typeof that.attr('style') == 'object') { + that.attr('style').cssText = ''; + that.attr('style').cssText = originalStyleAttr; + } else { + that.attr('style', originalStyleAttr); + } + if (callback) { callback.apply(this, arguments); } + $.dequeue( this ); + } + }); + }); +}; + +$.fn.extend({ + _addClass: $.fn.addClass, + addClass: function(classNames, speed, easing, callback) { + return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); + }, + + _removeClass: $.fn.removeClass, + removeClass: function(classNames,speed,easing,callback) { + return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); + }, + + _toggleClass: $.fn.toggleClass, + toggleClass: function(classNames, force, speed, easing, callback) { + if ( typeof force == "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter; + return this._toggleClass(classNames, force); + } else { + return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); + } + } else { + // without switch parameter; + return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); + } + }, + + switchClass: function(remove,add,speed,easing,callback) { + return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); + } +}); + + + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +$.extend($.effects, { + version: "1.8.16", + + // Saves a set of properties in a data storage + save: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + } + }, + + setMode: function(el, mode) { + if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle + return mode; + }, + + getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + var y, x; + switch (origin[0]) { + case 'top': y = 0; break; + case 'middle': y = 0.5; break; + case 'bottom': y = 1; break; + default: y = origin[0] / original.height; + }; + switch (origin[1]) { + case 'left': x = 0; break; + case 'center': x = 0.5; break; + case 'right': x = 1; break; + default: x = origin[1] / original.width; + }; + return {x: x, y: y}; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function(element) { + + // if the element is already wrapped, return it + if (element.parent().is('.ui-effects-wrapper')) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + 'float': element.css('float') + }, + wrapper = $('
    ') + .addClass('ui-effects-wrapper') + .css({ + fontSize: '100%', + background: 'transparent', + border: 'none', + margin: 0, + padding: 0 + }), + active = document.activeElement; + + element.wrap(wrapper); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if (element.css('position') == 'static') { + wrapper.css({ position: 'relative' }); + element.css({ position: 'relative' }); + } else { + $.extend(props, { + position: element.css('position'), + zIndex: element.css('z-index') + }); + $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { + props[pos] = element.css(pos); + if (isNaN(parseInt(props[pos], 10))) { + props[pos] = 'auto'; + } + }); + element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); + } + + return wrapper.css(props).show(); + }, + + removeWrapper: function(element) { + var parent, + active = document.activeElement; + + if (element.parent().is('.ui-effects-wrapper')) { + parent = element.parent().replaceWith(element); + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + return parent; + } + + return element; + }, + + setTransition: function(element, list, factor, value) { + value = value || {}; + $.each(list, function(i, x){ + unit = element.cssUnit(x); + if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; + }); + return value; + } +}); + + +function _normalizeArguments(effect, options, speed, callback) { + // shift params for method overloading + if (typeof effect == 'object') { + callback = options; + speed = null; + options = effect; + effect = options.effect; + } + if ($.isFunction(options)) { + callback = options; + speed = null; + options = {}; + } + if (typeof options == 'number' || $.fx.speeds[options]) { + callback = speed; + speed = options; + options = {}; + } + if ($.isFunction(speed)) { + callback = speed; + speed = null; + } + + options = options || {}; + + speed = speed || options.duration; + speed = $.fx.off ? 0 : typeof speed == 'number' + ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; + + callback = callback || options.complete; + + return [effect, options, speed, callback]; +} + +function standardSpeed( speed ) { + // valid standard speeds + if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { + return true; + } + + // invalid strings - treat as "normal" speed + if ( typeof speed === "string" && !$.effects[ speed ] ) { + return true; + } + + return false; +} + +$.fn.extend({ + effect: function(effect, options, speed, callback) { + var args = _normalizeArguments.apply(this, arguments), + // TODO: make effects take actual parameters instead of a hash + args2 = { + options: args[1], + duration: args[2], + callback: args[3] + }, + mode = args2.options.mode, + effectMethod = $.effects[effect]; + + if ( $.fx.off || !effectMethod ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args2.duration, args2.callback ); + } else { + return this.each(function() { + if ( args2.callback ) { + args2.callback.call( this ); + } + }); + } + } + + return effectMethod.call(this, args2); + }, + + _show: $.fn.show, + show: function(speed) { + if ( standardSpeed( speed ) ) { + return this._show.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'show'; + return this.effect.apply(this, args); + } + }, + + _hide: $.fn.hide, + hide: function(speed) { + if ( standardSpeed( speed ) ) { + return this._hide.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'hide'; + return this.effect.apply(this, args); + } + }, + + // jQuery core overloads toggle and creates _toggle + __toggle: $.fn.toggle, + toggle: function(speed) { + if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { + return this.__toggle.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'toggle'; + return this.effect.apply(this, args); + } + }, + + // helper functions + cssUnit: function(key) { + var style = this.css(key), val = []; + $.each( ['em','px','%','pt'], function(i, unit){ + if(style.indexOf(unit) > 0) + val = [parseFloat(style), unit]; + }); + return val; + } +}); + + + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend($.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert($.easing.default); + return $.easing[$.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); +/* + * jQuery UI Effects Blind 1.8.16 + * + * 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/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.blind = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'vertical') ? 'height' : 'width'; + var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); + if(mode == 'show') wrapper.css(ref, 0); // Shift + + // Animation + var animation = {}; + animation[ref] = mode == 'show' ? distance : 0; + + // Animate + wrapper.animate(animation, o.duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Bounce 1.8.16 + * + * 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/Effects/Bounce + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.bounce = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'up'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 5; // Default # of times + var speed = o.duration || 250; // Default speed per bounce + if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + if (mode == 'hide') distance = distance / (times * 2); + if (mode != 'hide') times--; + + // Animate + if (mode == 'show') { // Show Bounce + var animation = {opacity: 1}; + animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation, speed / 2, o.options.easing); + distance = distance / 2; + times--; + }; + for (var i = 0; i < times; i++) { // Bounces + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); + distance = (mode == 'hide') ? distance * 2 : distance / 2; + }; + if (mode == 'hide') { // Last Bounce + var animation = {opacity: 0}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + el.animate(animation, speed / 2, o.options.easing, function(){ + el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + } else { + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + }; + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Clip 1.8.16 + * + * 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/Effects/Clip + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.clip = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','height','width']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var animate = el[0].tagName == 'IMG' ? wrapper : el; + var ref = { + size: (direction == 'vertical') ? 'height' : 'width', + position: (direction == 'vertical') ? 'top' : 'left' + }; + var distance = (direction == 'vertical') ? animate.height() : animate.width(); + if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift + + // Animation + var animation = {}; + animation[ref.size] = mode == 'show' ? distance : 0; + animation[ref.position] = mode == 'show' ? 0 : distance / 2; + + // Animate + animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Drop 1.8.16 + * + * 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/Effects/Drop + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.drop = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','opacity']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + + // Animation + var animation = {opacity: mode == 'show' ? 1 : 0}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Explode 1.8.16 + * + * 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/Effects/Explode + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.explode = function(o) { + + return this.queue(function() { + + var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + + o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; + var el = $(this).show().css('visibility', 'hidden'); + var offset = el.offset(); + + //Substract the margins - not fixing the problem yet. + offset.top -= parseInt(el.css("marginTop"),10) || 0; + offset.left -= parseInt(el.css("marginLeft"),10) || 0; + + var width = el.outerWidth(true); + var height = el.outerHeight(true); + + for(var i=0;i
    ') + .css({ + position: 'absolute', + visibility: 'visible', + left: -j*(width/cells), + top: -i*(height/rows) + }) + .parent() + .addClass('ui-effects-explode') + .css({ + position: 'absolute', + overflow: 'hidden', + width: width/cells, + height: height/rows, + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), + opacity: o.options.mode == 'show' ? 0 : 1 + }).animate({ + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), + opacity: o.options.mode == 'show' ? 1 : 0 + }, o.duration || 500); + } + } + + // Set a timeout, to call the callback approx. when the other animations have finished + setTimeout(function() { + + o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); + if(o.callback) o.callback.apply(el[0]); // Callback + el.dequeue(); + + $('div.ui-effects-explode').remove(); + + }, o.duration || 500); + + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Fade 1.8.16 + * + * 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/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fade = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'); + + elem.animate({ opacity: mode }, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Fold 1.8.16 + * + * 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/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fold = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var size = o.options.size || 15; // Default fold size + var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value + var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var widthFirst = ((mode == 'show') != horizFirst); + var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; + var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; + var percent = /([0-9]+)%/.exec(size); + if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; + if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift + + // Animation + var animation1 = {}, animation2 = {}; + animation1[ref[0]] = mode == 'show' ? distance[0] : size; + animation2[ref[1]] = mode == 'show' ? distance[1] : 0; + + // Animate + wrapper.animate(animation1, duration, o.options.easing) + .animate(animation2, duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Highlight 1.8.16 + * + * 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/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.highlight = function(o) { + return this.queue(function() { + var elem = $(this), + props = ['backgroundImage', 'backgroundColor', 'opacity'], + mode = $.effects.setMode(elem, o.options.mode || 'show'), + animation = { + backgroundColor: elem.css('backgroundColor') + }; + + if (mode == 'hide') { + animation.opacity = 0; + } + + $.effects.save(elem, props); + elem + .show() + .css({ + backgroundImage: 'none', + backgroundColor: o.options.color || '#ffff99' + }) + .animate(animation, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (mode == 'hide' && elem.hide()); + $.effects.restore(elem, props); + (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Pulsate 1.8.16 + * + * 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/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.pulsate = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'show'); + times = ((o.options.times || 5) * 2) - 1; + duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, + isVisible = elem.is(':visible'), + animateTo = 0; + + if (!isVisible) { + elem.css('opacity', 0).show(); + animateTo = 1; + } + + if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { + times--; + } + + for (var i = 0; i < times; i++) { + elem.animate({ opacity: animateTo }, duration, o.options.easing); + animateTo = (animateTo + 1) % 2; + } + + elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { + if (animateTo == 0) { + elem.hide(); + } + (o.callback && o.callback.apply(this, arguments)); + }); + + elem + .queue('fx', function() { elem.dequeue(); }) + .dequeue(); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Scale 1.8.16 + * + * 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/Effects/Scale + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.puff = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'), + percent = parseInt(o.options.percent, 10) || 150, + factor = percent / 100, + original = { height: elem.height(), width: elem.width() }; + + $.extend(o.options, { + fade: true, + mode: mode, + percent: mode == 'hide' ? percent : 100, + from: mode == 'hide' + ? original + : { + height: original.height * factor, + width: original.width * factor + } + }); + + elem.effect('scale', o.options, o.duration, o.callback); + elem.dequeue(); + }); +}; + +$.effects.scale = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this); + + // Set options + var options = $.extend(true, {}, o.options); + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent + var direction = o.options.direction || 'both'; // Set default axis + var origin = o.options.origin; // The origin of the scaling + if (mode != 'effect') { // Set default origin and restore for show/hide + options.origin = origin || ['middle','center']; + options.restore = true; + } + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state + + // Adjust + var factor = { // Set scaling factor + y: direction != 'horizontal' ? (percent / 100) : 1, + x: direction != 'vertical' ? (percent / 100) : 1 + }; + el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state + + if (o.options.fade) { // Fade option to support puff + if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; + if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; + }; + + // Animation + options.from = el.from; options.to = el.to; options.mode = mode; + + // Animate + el.effect('size', options, o.duration, o.callback); + el.dequeue(); + }); + +}; + +$.effects.size = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity']; + var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore + var props2 = ['width','height','overflow']; // Copy for children + var cProps = ['fontSize']; + var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; + var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var restore = o.options.restore || false; // Default restore + var scale = o.options.scale || 'both'; // Default scale mode + var origin = o.options.origin; // The origin of the sizing + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || original; // Default from state + el.to = o.options.to || original; // Default to state + // Adjust + if (origin) { // Calculate baseline shifts + var baseline = $.effects.getBaseline(origin, original); + el.from.top = (original.height - el.from.height) * baseline.y; + el.from.left = (original.width - el.from.width) * baseline.x; + el.to.top = (original.height - el.to.height) * baseline.y; + el.to.left = (original.width - el.to.width) * baseline.x; + }; + var factor = { // Set scaling factor + from: {y: el.from.height / original.height, x: el.from.width / original.width}, + to: {y: el.to.height / original.height, x: el.to.width / original.width} + }; + if (scale == 'box' || scale == 'both') { // Scale the css box + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(vProps); + el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + props = props.concat(hProps); + el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); + el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); + }; + }; + if (scale == 'content' || scale == 'both') { // Scale the content + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(cProps); + el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); + }; + }; + $.effects.save(el, restore ? props : props1); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + el.css('overflow','hidden').css(el.from); // Shift + + // Animate + if (scale == 'content' || scale == 'both') { // Scale the children + vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size + hProps = hProps.concat(['marginLeft','marginRight']); // Add margins + props2 = props.concat(vProps).concat(hProps); // Concat + el.find("*[width]").each(function(){ + child = $(this); + if (restore) $.effects.save(child, props2); + var c_original = {height: child.height(), width: child.width()}; // Save original + child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; + child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; + if (factor.from.y != factor.to.y) { // Vertical props scaling + child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); + child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); + child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); + }; + child.css(child.from); // Shift children + child.animate(child.to, o.duration, o.options.easing, function(){ + if (restore) $.effects.restore(child, props2); // Restore children + }); // Animate children + }); + }; + + // Animate + el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if (el.to.opacity === 0) { + el.css('opacity', el.from.opacity); + } + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Shake 1.8.16 + * + * 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/Effects/Shake + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.shake = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'left'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 3; // Default # of times + var speed = o.duration || o.options.duration || 140; // Default speed per shake + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + + // Animation + var animation = {}, animation1 = {}, animation2 = {}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; + animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; + + // Animate + el.animate(animation, speed, o.options.easing); + for (var i = 1; i < times; i++) { // Shakes + el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); + }; + el.animate(animation1, speed, o.options.easing). + animate(animation, speed / 2, o.options.easing, function(){ // Last shake + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Slide 1.8.16 + * + * 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/Effects/Slide + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.slide = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); + if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift + + // Animation + var animation = {}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Transfer 1.8.16 + * + * 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/Effects/Transfer + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.transfer = function(o) { + return this.queue(function() { + var elem = $(this), + target = $(o.options.to), + endPosition = target.offset(), + animation = { + top: endPosition.top, + left: endPosition.left, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $('
    ') + .appendTo(document.body) + .addClass(o.options.className) + .css({ + top: startPosition.top, + left: startPosition.left, + height: elem.innerHeight(), + width: elem.innerWidth(), + position: 'absolute' + }) + .animate(animation, o.duration, o.options.easing, function() { + transfer.remove(); + (o.callback && o.callback.apply(elem[0], arguments)); + elem.dequeue(); + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Accordion 1.8.16 + * + * 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/Accordion + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.accordion", { + options: { + active: 0, + animated: "slide", + autoHeight: true, + clearStyle: false, + collapsible: false, + event: "click", + fillSpace: false, + header: "> li > :first-child,> :not(li):even", + icons: { + header: "ui-icon-triangle-1-e", + headerSelected: "ui-icon-triangle-1-s" + }, + navigation: false, + navigationFilter: function() { + return this.href.toLowerCase() === location.href.toLowerCase(); + } + }, + + _create: function() { + var self = this, + options = self.options; + + self.running = 0; + + self.element + .addClass( "ui-accordion ui-widget ui-helper-reset" ) + // in lack of child-selectors in CSS + // we need to mark top-LIs in a UL-accordion for some IE-fix + .children( "li" ) + .addClass( "ui-accordion-li-fix" ); + + self.headers = self.element.find( options.header ) + .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ) + .bind( "mouseenter.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + }) + .bind( "mouseleave.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-hover" ); + }) + .bind( "focus.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-focus" ); + }) + .bind( "blur.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-focus" ); + }); + + self.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ); + + if ( options.navigation ) { + var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 ); + if ( current.length ) { + var header = current.closest( ".ui-accordion-header" ); + if ( header.length ) { + // anchor within header + self.active = header; + } else { + // anchor within content + self.active = current.closest( ".ui-accordion-content" ).prev(); + } + } + } + + self.active = self._findActive( self.active || options.active ) + .addClass( "ui-state-default ui-state-active" ) + .toggleClass( "ui-corner-all" ) + .toggleClass( "ui-corner-top" ); + self.active.next().addClass( "ui-accordion-content-active" ); + + self._createIcons(); + self.resize(); + + // ARIA + self.element.attr( "role", "tablist" ); + + self.headers + .attr( "role", "tab" ) + .bind( "keydown.accordion", function( event ) { + return self._keydown( event ); + }) + .next() + .attr( "role", "tabpanel" ); + + self.headers + .not( self.active || "" ) + .attr({ + "aria-expanded": "false", + "aria-selected": "false", + tabIndex: -1 + }) + .next() + .hide(); + + // make sure at least one header is in the tab order + if ( !self.active.length ) { + self.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + self.active + .attr({ + "aria-expanded": "true", + "aria-selected": "true", + tabIndex: 0 + }); + } + + // only need links in tab order for Safari + if ( !$.browser.safari ) { + self.headers.find( "a" ).attr( "tabIndex", -1 ); + } + + if ( options.event ) { + self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) { + self._clickHandler.call( self, event, this ); + event.preventDefault(); + }); + } + }, + + _createIcons: function() { + var options = this.options; + if ( options.icons ) { + $( "" ) + .addClass( "ui-icon " + options.icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-icon" ) + .toggleClass(options.icons.header) + .toggleClass(options.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 options = 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 contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role" ) + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" ); + if ( options.autoHeight || options.fillHeight ) { + contents.css( "height", "" ); + } + + return $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + + if ( key == "active" ) { + this.activate( value ); + } + if ( key == "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key == "disabled" ) { + this.headers.add(this.headers.next()) + [ value ? "addClass" : "removeClass" ]( + "ui-accordion-disabled ui-state-disabled" ); + } + }, + + _keydown: function( event ) { + if ( this.options.disabled || event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._clickHandler( { target: event.target }, event.target ); + event.preventDefault(); + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + return false; + } + + return true; + }, + + resize: function() { + var options = this.options, + maxHeight; + + if ( options.fillSpace ) { + if ( $.browser.msie ) { + var defOverflow = this.element.parent().css( "overflow" ); + this.element.parent().css( "overflow", "hidden"); + } + maxHeight = this.element.parent().height(); + if ($.browser.msie) { + this.element.parent().css( "overflow", defOverflow ); + } + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( options.autoHeight ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + }) + .height( maxHeight ); + } + + return this; + }, + + activate: function( index ) { + // TODO this gets called on init, changing the option without an explicit call for that + this.options.active = index; + // call clickHandler with custom event + var active = this._findActive( index )[ 0 ]; + this._clickHandler( { target: active }, active ); + + return this; + }, + + _findActive: function( selector ) { + return selector + ? typeof selector === "number" + ? this.headers.filter( ":eq(" + selector + ")" ) + : this.headers.not( this.headers.not( selector ) ) + : selector === false + ? $( [] ) + : this.headers.filter( ":eq(0)" ); + }, + + // TODO isn't event.target enough? why the separate target argument? + _clickHandler: function( event, target ) { + var options = this.options; + if ( options.disabled ) { + return; + } + + // called only when using activate(false) to close all parts programmatically + if ( !event.target ) { + if ( !options.collapsible ) { + return; + } + this.active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + this.active.next().addClass( "ui-accordion-content-active" ); + var toHide = this.active.next(), + data = { + options: options, + newHeader: $( [] ), + oldHeader: options.active, + newContent: $( [] ), + oldContent: toHide + }, + toShow = ( this.active = $( [] ) ); + this._toggle( toShow, toHide, data ); + return; + } + + // get the click target + var clicked = $( event.currentTarget || target ), + clickedIsActive = clicked[0] === this.active[0]; + + // TODO the option is changed, is that correct? + // TODO if it is correct, shouldn't that happen after determining that the click is valid? + options.active = options.collapsible && clickedIsActive ? + false : + this.headers.index( clicked ); + + // if animations are still active, or the active header is the target, ignore click + if ( this.running || ( !options.collapsible && clickedIsActive ) ) { + return; + } + + // find elements to show and hide + var active = this.active, + toShow = clicked.next(), + toHide = this.active.next(), + data = { + options: options, + newHeader: clickedIsActive && options.collapsible ? $([]) : clicked, + oldHeader: this.active, + newContent: clickedIsActive && options.collapsible ? $([]) : toShow, + oldContent: toHide + }, + down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $([]) : clicked; + this._toggle( toShow, toHide, data, clickedIsActive, down ); + + // switch classes + active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-state-default ui-corner-all" ) + .addClass( "ui-state-active ui-corner-top" ) + .children( ".ui-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.headerSelected ); + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + + return; + }, + + _toggle: function( toShow, toHide, data, clickedIsActive, down ) { + var self = this, + options = self.options; + + self.toShow = toShow; + self.toHide = toHide; + self.data = data; + + var complete = function() { + if ( !self ) { + return; + } + return self._completed.apply( self, arguments ); + }; + + // trigger changestart event + self._trigger( "changestart", null, self.data ); + + // count elements to animate + self.running = toHide.size() === 0 ? toShow.size() : toHide.size(); + + if ( options.animated ) { + var animOptions = {}; + + if ( options.collapsible && clickedIsActive ) { + animOptions = { + toShow: $( [] ), + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } else { + animOptions = { + toShow: toShow, + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } + + if ( !options.proxied ) { + options.proxied = options.animated; + } + + if ( !options.proxiedDuration ) { + options.proxiedDuration = options.duration; + } + + options.animated = $.isFunction( options.proxied ) ? + options.proxied( animOptions ) : + options.proxied; + + options.duration = $.isFunction( options.proxiedDuration ) ? + options.proxiedDuration( animOptions ) : + options.proxiedDuration; + + var animations = $.ui.accordion.animations, + duration = options.duration, + easing = options.animated; + + if ( easing && !animations[ easing ] && !$.easing[ easing ] ) { + easing = "slide"; + } + if ( !animations[ easing ] ) { + animations[ easing ] = function( options ) { + this.slide( options, { + easing: easing, + duration: duration || 700 + }); + }; + } + + animations[ easing ]( animOptions ); + } else { + if ( options.collapsible && clickedIsActive ) { + toShow.toggle(); + } else { + toHide.hide(); + toShow.show(); + } + + complete( true ); + } + + // TODO assert that the blur and focus triggers are really necessary, remove otherwise + toHide.prev() + .attr({ + "aria-expanded": "false", + "aria-selected": "false", + tabIndex: -1 + }) + .blur(); + toShow.prev() + .attr({ + "aria-expanded": "true", + "aria-selected": "true", + tabIndex: 0 + }) + .focus(); + }, + + _completed: function( cancel ) { + this.running = cancel ? 0 : --this.running; + if ( this.running ) { + return; + } + + if ( this.options.clearStyle ) { + this.toShow.add( this.toHide ).css({ + height: "", + overflow: "" + }); + } + + // other classes are removed before the animation; this one needs to stay until completed + this.toHide.removeClass( "ui-accordion-content-active" ); + // Work around for rendering bug in IE (#5421) + if ( this.toHide.length ) { + this.toHide.parent()[0].className = this.toHide.parent()[0].className; + } + + this._trigger( "change", null, this.data ); + } +}); + +$.extend( $.ui.accordion, { + version: "1.8.16", + animations: { + slide: function( options, additions ) { + options = $.extend({ + easing: "swing", + duration: 300 + }, options, additions ); + if ( !options.toHide.size() ) { + options.toShow.animate({ + height: "show", + paddingTop: "show", + paddingBottom: "show" + }, options ); + return; + } + if ( !options.toShow.size() ) { + options.toHide.animate({ + height: "hide", + paddingTop: "hide", + paddingBottom: "hide" + }, options ); + return; + } + var overflow = options.toShow.css( "overflow" ), + percentDone = 0, + showProps = {}, + hideProps = {}, + fxAttrs = [ "height", "paddingTop", "paddingBottom" ], + originalWidth; + // fix width before calculating height of hidden element + var s = options.toShow; + originalWidth = s[0].style.width; + s.width( parseInt( s.parent().width(), 10 ) + - parseInt( s.css( "paddingLeft" ), 10 ) + - parseInt( s.css( "paddingRight" ), 10 ) + - ( parseInt( s.css( "borderLeftWidth" ), 10 ) || 0 ) + - ( parseInt( s.css( "borderRightWidth" ), 10) || 0 ) ); + + $.each( fxAttrs, function( i, prop ) { + hideProps[ prop ] = "hide"; + + var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ ); + showProps[ prop ] = { + value: parts[ 1 ], + unit: parts[ 2 ] || "px" + }; + }); + options.toShow.css({ height: 0, overflow: "hidden" }).show(); + options.toHide + .filter( ":hidden" ) + .each( options.complete ) + .end() + .filter( ":visible" ) + .animate( hideProps, { + step: function( now, settings ) { + // only calculate the percent when animating height + // IE gets very inconsistent results when animating elements + // with small values, which is common for padding + if ( settings.prop == "height" ) { + percentDone = ( settings.end - settings.start === 0 ) ? 0 : + ( settings.now - settings.start ) / ( settings.end - settings.start ); + } + + options.toShow[ 0 ].style[ settings.prop ] = + ( percentDone * showProps[ settings.prop ].value ) + + showProps[ settings.prop ].unit; + }, + duration: options.duration, + easing: options.easing, + complete: function() { + if ( !options.autoHeight ) { + options.toShow.css( "height", "" ); + } + options.toShow.css({ + width: originalWidth, + overflow: overflow + }); + options.complete(); + } + }); + }, + bounceslide: function( options ) { + this.slide( options, { + easing: options.down ? "easeOutBounce" : "swing", + duration: options.down ? 1000 : 200 + }); + } + } +}); + +})( jQuery ); +/* + * jQuery UI Autocomplete 1.8.16 + * + * 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/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function( $, undefined ) { + +// used to prevent race conditions with remote data sources +var requestIndex = 0; + +$.widget( "ui.autocomplete", { + options: { + appendTo: "body", + autoFocus: false, + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null + }, + + pending: 0, + + _create: function() { + var self = this, + doc = this.element[ 0 ].ownerDocument, + suppressKeyPress; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ) + // TODO verify these actually work as intended + .attr({ + role: "textbox", + "aria-autocomplete": "list", + "aria-haspopup": "true" + }) + .bind( "keydown.autocomplete", function( event ) { + if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) { + return; + } + + suppressKeyPress = false; + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + self._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + self._move( "nextPage", event ); + break; + case keyCode.UP: + self._move( "previous", event ); + // prevent moving cursor to beginning of text field in some browsers + event.preventDefault(); + break; + case keyCode.DOWN: + self._move( "next", event ); + // prevent moving cursor to end of text field in some browsers + event.preventDefault(); + break; + case keyCode.ENTER: + case keyCode.NUMPAD_ENTER: + // when menu is open and has focus + if ( self.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + } + //passthrough - ENTER and TAB both select the current element + case keyCode.TAB: + if ( !self.menu.active ) { + return; + } + self.menu.select( event ); + break; + case keyCode.ESCAPE: + self.element.val( self.term ); + self.close( event ); + break; + default: + // keypress is triggered before the input value is changed + clearTimeout( self.searching ); + self.searching = setTimeout(function() { + // only search if the value has changed + if ( self.term != self.element.val() ) { + self.selectedItem = null; + self.search( null, event ); + } + }, self.options.delay ); + break; + } + }) + .bind( "keypress.autocomplete", function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + event.preventDefault(); + } + }) + .bind( "focus.autocomplete", function() { + if ( self.options.disabled ) { + return; + } + + self.selectedItem = null; + self.previous = self.element.val(); + }) + .bind( "blur.autocomplete", function( event ) { + if ( self.options.disabled ) { + return; + } + + clearTimeout( self.searching ); + // clicks on the menu (or a button to trigger a search) will cause a blur event + self.closing = setTimeout(function() { + self.close( event ); + self._change( event ); + }, 150 ); + }); + this._initSource(); + this.response = function() { + return self._response.apply( self, arguments ); + }; + this.menu = $( "
      " ) + .addClass( "ui-autocomplete" ) + .appendTo( $( this.options.appendTo || "body", doc )[0] ) + // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown) + .mousedown(function( event ) { + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = self.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + setTimeout(function() { + $( document ).one( 'mousedown', function( event ) { + if ( event.target !== self.element[ 0 ] && + event.target !== menuElement && + !$.ui.contains( menuElement, event.target ) ) { + self.close(); + } + }); + }, 1 ); + } + + // use another timeout to make sure the blur-event-handler on the input was already triggered + setTimeout(function() { + clearTimeout( self.closing ); + }, 13); + }) + .menu({ + focus: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ); + if ( false !== self._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( /^key/.test(event.originalEvent.type) ) { + self.element.val( item.value ); + } + } + }, + selected: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ), + previous = self.previous; + + // only trigger when focus was lost (click on menu) + if ( self.element[0] !== doc.activeElement ) { + self.element.focus(); + self.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + setTimeout(function() { + self.previous = previous; + self.selectedItem = item; + }, 1); + } + + if ( false !== self._trigger( "select", event, { item: item } ) ) { + self.element.val( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + self.term = self.element.val(); + + self.close( event ); + self.selectedItem = item; + }, + blur: function( event, ui ) { + // don't set the value of the text field if it's already correct + // this prevents moving the cursor unnecessarily + if ( self.menu.element.is(":visible") && + ( self.element.val() !== self.term ) ) { + self.element.val( self.term ); + } + } + }) + .zIndex( this.element.zIndex() + 1 ) + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .hide() + .data( "menu" ); + if ( $.fn.bgiframe ) { + this.menu.element.bgiframe(); + } + }, + + destroy: function() { + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-autocomplete" ) + .removeAttr( "aria-haspopup" ); + this.menu.element.remove(); + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] ) + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _initSource: function() { + var self = this, + array, + url; + if ( $.isArray(this.options.source) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter(array, request.term) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( self.xhr ) { + self.xhr.abort(); + } + self.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + autocompleteRequest: ++requestIndex, + success: function( data, status ) { + if ( this.autocompleteRequest === requestIndex ) { + response( data ); + } + }, + error: function() { + if ( this.autocompleteRequest === requestIndex ) { + response( [] ); + } + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + search: function( value, event ) { + value = value != null ? value : this.element.val(); + + // always save the actual value, not the one passed as an argument + this.term = this.element.val(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + clearTimeout( this.closing ); + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + + this.source( { term: value }, this.response ); + }, + + _response: function( content ) { + if ( !this.options.disabled && content && content.length ) { + content = this._normalize( content ); + this._suggest( content ); + this._trigger( "open" ); + } else { + this.close(); + } + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, + + close: function( event ) { + clearTimeout( this.closing ); + if ( this.menu.element.is(":visible") ) { + this.menu.element.hide(); + this.menu.deactivate(); + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[0].label && items[0].value ) { + return items; + } + return $.map( items, function(item) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend({ + label: item.label || item.value, + value: item.value || item.label + }, item ); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element + .empty() + .zIndex( this.element.zIndex() + 1 ); + this._renderMenu( ul, items ); + // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate + this.menu.deactivate(); + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position )); + + if ( this.options.autoFocus ) { + this.menu.next( new $.Event("mouseover") ); + } + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + ul.width( "" ).outerWidth(), + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var self = this; + $.each( items, function( index, item ) { + self._renderItem( ul, item ); + }); + }, + + _renderItem: function( ul, item) { + return $( "
    • " ) + .data( "item.autocomplete", item ) + .append( $( "" ).text( item.label ) ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is(":visible") ) { + this.search( null, event ); + return; + } + if ( this.menu.first() && /^previous/.test(direction) || + this.menu.last() && /^next/.test(direction) ) { + this.element.val( this.term ); + this.menu.deactivate(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }, + filter: function(array, term) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); + return $.grep( array, function(value) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +}( jQuery )); + +/* + * jQuery UI Menu (not officially released) + * + * This widget isn't yet finished and the API is subject to change. We plan to finish + * it for the next release. You're welcome to give it a try anyway and give us feedback, + * as long as you're okay with migrating your code later on. We can help with that, too. + * + * Copyright 2010, 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/Menu + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.menu", { + _create: function() { + var self = this; + this.element + .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") + .attr({ + role: "listbox", + "aria-activedescendant": "ui-active-menuitem" + }) + .click(function( event ) { + if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) { + return; + } + // temporary + event.preventDefault(); + self.select( event ); + }); + this.refresh(); + }, + + refresh: function() { + var self = this; + + // don't refresh list items that are already adapted + var items = this.element.children("li:not(.ui-menu-item):has(a)") + .addClass("ui-menu-item") + .attr("role", "menuitem"); + + items.children("a") + .addClass("ui-corner-all") + .attr("tabindex", -1) + // mouseenter doesn't work with event delegation + .mouseenter(function( event ) { + self.activate( event, $(this).parent() ); + }) + .mouseleave(function() { + self.deactivate(); + }); + }, + + activate: function( event, item ) { + this.deactivate(); + if (this.hasScroll()) { + var offset = item.offset().top - this.element.offset().top, + scroll = this.element.scrollTop(), + elementHeight = this.element.height(); + if (offset < 0) { + this.element.scrollTop( scroll + offset); + } else if (offset >= elementHeight) { + this.element.scrollTop( scroll + offset - elementHeight + item.height()); + } + } + this.active = item.eq(0) + .children("a") + .addClass("ui-state-hover") + .attr("id", "ui-active-menuitem") + .end(); + this._trigger("focus", event, { item: item }); + }, + + deactivate: function() { + if (!this.active) { return; } + + this.active.children("a") + .removeClass("ui-state-hover") + .removeAttr("id"); + this._trigger("blur"); + this.active = null; + }, + + next: function(event) { + this.move("next", ".ui-menu-item:first", event); + }, + + previous: function(event) { + this.move("prev", ".ui-menu-item:last", event); + }, + + 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(direction, edge, event) { + if (!this.active) { + this.activate(event, this.element.children(edge)); + return; + } + var next = this.active[direction + "All"](".ui-menu-item").eq(0); + if (next.length) { + this.activate(event, next); + } else { + this.activate(event, this.element.children(edge)); + } + }, + + // TODO merge with previousPage + nextPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.last()) { + this.activate(event, this.element.children(".ui-menu-item:first")); + return; + } + var base = this.active.offset().top, + height = this.element.height(), + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base - height + $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:last"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.last() ? ":first" : ":last")); + } + }, + + // TODO merge with nextPage + previousPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.first()) { + this.activate(event, this.element.children(".ui-menu-item:last")); + return; + } + + var base = this.active.offset().top, + height = this.element.height(); + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base + height - $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:first"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.first() ? ":last" : ":first")); + } + }, + + hasScroll: function() { + return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight"); + }, + + select: function( event ) { + this._trigger("selected", event, { item: this.active }); + } +}); + +}(jQuery)); +/* + * jQuery UI Button 1.8.16 + * + * 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/Button + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var lastActive, startXPos, startYPos, clickDragged, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + stateClasses = "ui-state-hover ui-state-active ", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function() { + var buttons = $( this ).find( ":ui-button" ); + setTimeout(function() { + buttons.button( "refresh" ); + }, 1 ); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + if ( form ) { + radios = $( form ).find( "[name='" + name + "']" ); + } else { + radios = $( "[name='" + name + "']", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + options: { + disabled: null, + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset.button" ) + .bind( "reset.button", formResetHandler ); + + if ( typeof this.options.disabled !== "boolean" ) { + this.options.disabled = this.element.propAttr( "disabled" ); + } + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var self = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), + focusClass = "ui-state-focus"; + + if ( options.label === null ) { + options.label = this.buttonElement.html(); + } + + if ( this.element.is( ":disabled" ) ) { + options.disabled = true; + } + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter.button", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave.button", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( hoverClass ); + }) + .bind( "click.button", function( event ) { + if ( options.disabled ) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + }); + + this.element + .bind( "focus.button", function() { + // no need to check disabled, focus won't be triggered anyway + self.buttonElement.addClass( focusClass ); + }) + .bind( "blur.button", function() { + self.buttonElement.removeClass( focusClass ); + }); + + if ( toggleButton ) { + this.element.bind( "change.button", function() { + if ( clickDragged ) { + return; + } + self.refresh(); + }); + // if mouse moves between mousedown and mouseup (drag) set clickDragged flag + // prevents issue where button state changes but checkbox/radio checked state + // does not in Firefox (see ticket #6970) + this.buttonElement + .bind( "mousedown.button", function( event ) { + if ( options.disabled ) { + return; + } + clickDragged = false; + startXPos = event.pageX; + startYPos = event.pageY; + }) + .bind( "mouseup.button", function( event ) { + if ( options.disabled ) { + return; + } + if ( startXPos !== event.pageX || startYPos !== event.pageY ) { + clickDragged = true; + } + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled || clickDragged ) { + return false; + } + $( this ).toggleClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", self.element[0].checked ); + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled || clickDragged ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", "true" ); + + var radio = self.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + }); + } else { + this.buttonElement + .bind( "mousedown.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + $( document ).one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown.button", function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "keyup.button", function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + // TODO: pull out $.Widget's handling for the disabled option into + // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can + // be overridden by individual plugins + this._setOption( "disabled", options.disabled ); + this._resetButton(); + }, + + _determineButtonType: function() { + + if ( this.element.is(":checkbox") ) { + this.type = "checkbox"; + } else if ( this.element.is(":radio") ) { + this.type = "radio"; + } else if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + var ancestor = this.element.parents().filter(":last"), + labelSelector = "label[for='" + this.element.attr("id") + "']"; + this.buttonElement = ancestor.find( labelSelector ); + if ( !this.buttonElement.length ) { + ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(); + this.buttonElement = ancestor.filter( labelSelector ); + if ( !this.buttonElement.length ) { + this.buttonElement = ancestor.find( labelSelector ); + } + } + this.element.addClass( "ui-helper-hidden-accessible" ); + + var checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.attr( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "disabled" ) { + if ( value ) { + this.element.propAttr( "disabled", true ); + } else { + this.element.propAttr( "disabled", false ); + } + return; + } + this._resetButton(); + }, + + refresh: function() { + var isDisabled = this.element.is( ":disabled" ); + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "" ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary, + buttonClasses = []; + + if ( icons.primary || icons.secondary ) { + if ( this.options.text ) { + buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); + } + + if ( icons.primary ) { + buttonElement.prepend( "" ); + } + + if ( icons.secondary ) { + buttonElement.append( "" ); + } + + if ( !this.options.text ) { + buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); + + if ( !this.hasTitle ) { + buttonElement.attr( "title", buttonText ); + } + } + } else { + buttonClasses.push( "ui-button-text-only" ); + } + buttonElement.addClass( buttonClasses.join( " " ) ); + } +}); + +$.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( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + refresh: function() { + var ltr = this.element.css( "direction" ) === "ltr"; + + this.buttons = this.element.find( this.options.items ) + .filter( ":ui-button" ) + .button( "refresh" ) + .end() + .not( ":ui-button" ) + .button() + .end() + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( ltr ? "ui-corner-left" : "ui-corner-right" ) + .end() + .filter( ":last" ) + .addClass( ltr ? "ui-corner-right" : "ui-corner-left" ) + .end() + .end(); + }, + + destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + + $.Widget.prototype.destroy.call( this ); + } +}); + +}( jQuery ) ); +/* + * jQuery UI Datepicker 1.8.16 + * + * 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/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.8.16" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); +var instActive; + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false, // True to size the input for the date format, false to leave as is + disabled: false // The initial disabled state + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = bindHover($('
      ')); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + //Keep track of the maximum number of rows displayed (see #7043) + maxRows: 4, + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + bindHover($('
      ')))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + //If disabled option is true, disable the datepicker before showing it (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements + // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height + inst.dpDiv.css( "display", "block" ); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + removeAttr("disabled"); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + attr("disabled", "disabled"); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) + inst.settings.minDate = this._formatDate(inst, minDate); + if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) + inst.settings.maxDate = this._formatDate(inst, maxDate); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDate(inst, date); + this._updateAlternate(inst); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + + $.datepicker._currentClass + ')', inst.dpDiv); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + var onSelect = $.datepicker._get(inst, 'onSelect'); + if (onSelect) { + var dateStr = $.datepicker._formatDate(inst); + + // trigger custom callback + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); + } + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + If false returned from beforeShow event handler do not show. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + if ( $.datepicker._datepickerShowing ) { + $.datepicker._triggerOnClose($.datepicker._curInst); + } + $.datepicker._curInst.dpDiv.stop(true, true); + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; + if(beforeShowSettings === false){ + //false + return; + } + extendRemove(inst.settings, beforeShowSettings); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !! cover.length ){ + var borders = $.datepicker._getBorders(inst.dpDiv); + cover.css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + } + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + $.datepicker._datepickerShowing = true; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + self.maxRows = 4; //Reset the max number of rows being displayed (see #7043) + var borders = $.datepicker._getBorders(inst.dpDiv); + instActive = inst; // for delegate hover events + inst.dpDiv.empty().append(this._generateHTML(inst)); + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 + cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + } + inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) + inst.input.focus(); + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + var origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml && inst.yearshtml ){ + inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Trigger custom callback of onClose. */ + _triggerOnClose: function(inst) { + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._tidyDialog(inst); + this._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + $.datepicker._triggerOnClose(inst); + this._datepickerShowing = false; + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + var $target = $(event.target); + if ($target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline) + this._updateDatepicker(inst); + else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + var isDoubled = lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { + return [ [k, v] ]; + }).sort(function (a, b) { + return -(a[1].length - b[1].length); + }); + var index = -1; + $.each(names, function (i, pair) { + var name = pair[1]; + if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { + index = pair[0]; + iValue += name.length; + return false; + } + }); + if (index != -1) + return index + 1; + else + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (iValue < value.length){ + throw "Extra/unparsed characters found in date: " + value.substring(iValue); + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/00 + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + 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', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date; + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
      ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
      ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + this.maxRows = 4; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
      '; + } + calender += '
      ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
      ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate + var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) + this.maxRows = numRows; + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
      ' + this._get(inst, 'weekHeader') + '
      ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
      ' + (isMultiMonth ? '
      ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
      ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
      '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
      '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function bindHover(dpDiv) { + var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; + return dpDiv.bind('mouseout', function(event) { + var elem = $( event.target ).closest( selector ); + if ( !elem.length ) { + return; + } + elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" ); + }) + .bind('mouseover', function(event) { + var elem = $( event.target ).closest( selector ); + if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) || + !elem.length ) { + return; + } + elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + elem.addClass('ui-state-hover'); + if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover'); + if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover'); + }); +} + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.16"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); +/* + * jQuery UI Dialog 1.8.16 + * + * 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/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function( $, undefined ) { + +var uiDialogClasses = + 'ui-dialog ' + + 'ui-widget ' + + 'ui-widget-content ' + + 'ui-corner-all ', + sizeRelatedOptions = { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + resizableRelatedOptions = { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }, + // support for jQuery 1.3.2 - handle common attrFn methods for dialog + attrFn = $.attrFn || { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true, + click: true + }; + +$.widget("ui.dialog", { + options: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + dialogClass: '', + draggable: true, + hide: null, + height: 'auto', + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: 'center', + at: 'center', + collision: 'fit', + // ensure that the titlebar is never outside the document + using: function(pos) { + var topOffset = $(this).css(pos).offset().top; + if (topOffset < 0) { + $(this).css('top', pos.top - topOffset); + } + } + }, + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000 + }, + + _create: function() { + this.originalTitle = this.element.attr('title'); + // #5742 - .attr() might return a DOMElement + if ( typeof this.originalTitle !== "string" ) { + this.originalTitle = ""; + } + + this.options.title = this.options.title || this.originalTitle; + var self = this, + options = self.options, + + title = options.title || ' ', + titleId = $.ui.dialog.getTitleId(self.element), + + uiDialog = (self.uiDialog = $('
      ')) + .appendTo(document.body) + .hide() + .addClass(uiDialogClasses + options.dialogClass) + .css({ + zIndex: options.zIndex + }) + // setting tabIndex makes the div focusable + // setting outline to 0 prevents a border on focus in Mozilla + .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { + if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + self.close(event); + event.preventDefault(); + } + }) + .attr({ + role: 'dialog', + 'aria-labelledby': titleId + }) + .mousedown(function(event) { + self.moveToTop(false, event); + }), + + uiDialogContent = self.element + .show() + .removeAttr('title') + .addClass( + 'ui-dialog-content ' + + 'ui-widget-content') + .appendTo(uiDialog), + + uiDialogTitlebar = (self.uiDialogTitlebar = $('
      ')) + .addClass( + 'ui-dialog-titlebar ' + + 'ui-widget-header ' + + 'ui-corner-all ' + + 'ui-helper-clearfix' + ) + .prependTo(uiDialog), + + uiDialogTitlebarClose = $('') + .addClass( + 'ui-dialog-titlebar-close ' + + 'ui-corner-all' + ) + .attr('role', 'button') + .hover( + function() { + uiDialogTitlebarClose.addClass('ui-state-hover'); + }, + function() { + uiDialogTitlebarClose.removeClass('ui-state-hover'); + } + ) + .focus(function() { + uiDialogTitlebarClose.addClass('ui-state-focus'); + }) + .blur(function() { + uiDialogTitlebarClose.removeClass('ui-state-focus'); + }) + .click(function(event) { + self.close(event); + return false; + }) + .appendTo(uiDialogTitlebar), + + uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) + .addClass( + 'ui-icon ' + + 'ui-icon-closethick' + ) + .text(options.closeText) + .appendTo(uiDialogTitlebarClose), + + uiDialogTitle = $('') + .addClass('ui-dialog-title') + .attr('id', titleId) + .html(title) + .prependTo(uiDialogTitlebar); + + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { + options.beforeClose = options.beforeclose; + } + + uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + + if (options.draggable && $.fn.draggable) { + self._makeDraggable(); + } + if (options.resizable && $.fn.resizable) { + self._makeResizable(); + } + + self._createButtons(options.buttons); + self._isOpen = false; + + if ($.fn.bgiframe) { + uiDialog.bgiframe(); + } + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + destroy: function() { + var self = this; + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.hide(); + self.element + .unbind('.dialog') + .removeData('dialog') + .removeClass('ui-dialog-content ui-widget-content') + .hide().appendTo('body'); + self.uiDialog.remove(); + + if (self.originalTitle) { + self.element.attr('title', self.originalTitle); + } + + return self; + }, + + widget: function() { + return this.uiDialog; + }, + + close: function(event) { + var self = this, + maxZ, thisZ; + + if (false === self._trigger('beforeClose', event)) { + return; + } + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.unbind('keypress.ui-dialog'); + + self._isOpen = false; + + if (self.options.hide) { + self.uiDialog.hide(self.options.hide, function() { + self._trigger('close', event); + }); + } else { + self.uiDialog.hide(); + self._trigger('close', event); + } + + $.ui.dialog.overlay.resize(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + if (self.options.modal) { + maxZ = 0; + $('.ui-dialog').each(function() { + if (this !== self.uiDialog[0]) { + thisZ = $(this).css('z-index'); + if(!isNaN(thisZ)) { + maxZ = Math.max(maxZ, thisZ); + } + } + }); + $.ui.dialog.maxZ = maxZ; + } + + return self; + }, + + isOpen: function() { + return this._isOpen; + }, + + // the force parameter allows us to move modal dialogs to their correct + // position on open + moveToTop: function(force, event) { + var self = this, + options = self.options, + saveScroll; + + if ((options.modal && !force) || + (!options.stack && !options.modal)) { + return self._trigger('focus', event); + } + + if (options.zIndex > $.ui.dialog.maxZ) { + $.ui.dialog.maxZ = options.zIndex; + } + if (self.overlay) { + $.ui.dialog.maxZ += 1; + self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); + } + + //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. + // http://ui.jquery.com/bugs/ticket/3193 + saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() }; + $.ui.dialog.maxZ += 1; + self.uiDialog.css('z-index', $.ui.dialog.maxZ); + self.element.attr(saveScroll); + self._trigger('focus', event); + + return self; + }, + + open: function() { + if (this._isOpen) { return; } + + var self = this, + options = self.options, + uiDialog = self.uiDialog; + + self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; + self._size(); + self._position(options.position); + uiDialog.show(options.show); + self.moveToTop(true); + + // prevent tabbing out of modal dialogs + if (options.modal) { + uiDialog.bind('keypress.ui-dialog', function(event) { + if (event.keyCode !== $.ui.keyCode.TAB) { + return; + } + + var tabbables = $(':tabbable', this), + first = tabbables.filter(':first'), + last = tabbables.filter(':last'); + + if (event.target === last[0] && !event.shiftKey) { + first.focus(1); + return false; + } else if (event.target === first[0] && event.shiftKey) { + last.focus(1); + return false; + } + }); + } + + // set focus to the first tabbable element in the content area or the first button + // if there are no tabbable elements, set focus on the dialog itself + $(self.element.find(':tabbable').get().concat( + uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( + uiDialog.get()))).eq(0).focus(); + + self._isOpen = true; + self._trigger('open'); + + return self; + }, + + _createButtons: function(buttons) { + var self = this, + hasButtons = false, + uiDialogButtonPane = $('
      ') + .addClass( + 'ui-dialog-buttonpane ' + + 'ui-widget-content ' + + 'ui-helper-clearfix' + ), + uiButtonSet = $( "
      " ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( uiDialogButtonPane ); + + // if we already have a button pane, remove it + self.uiDialog.find('.ui-dialog-buttonpane').remove(); + + if (typeof buttons === 'object' && buttons !== null) { + $.each(buttons, function() { + return !(hasButtons = true); + }); + } + if (hasButtons) { + $.each(buttons, function(name, props) { + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + var button = $('') + .click(function() { + props.click.apply(self.element[0], arguments); + }) + .appendTo(uiButtonSet); + // can't use .attr( props, true ) with jQuery 1.3.2. + $.each( props, function( key, value ) { + if ( key === "click" ) { + return; + } + if ( key in attrFn ) { + button[ key ]( value ); + } else { + button.attr( key, value ); + } + }); + if ($.fn.button) { + button.button(); + } + }); + uiDialogButtonPane.appendTo(self.uiDialog); + } + }, + + _makeDraggable: function() { + var self = this, + options = self.options, + doc = $(document), + heightBeforeDrag; + + function filteredUi(ui) { + return { + position: ui.position, + offset: ui.offset + }; + } + + self.uiDialog.draggable({ + cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', + handle: '.ui-dialog-titlebar', + containment: 'document', + start: function(event, ui) { + heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); + $(this).height($(this).height()).addClass("ui-dialog-dragging"); + self._trigger('dragStart', event, filteredUi(ui)); + }, + drag: function(event, ui) { + self._trigger('drag', event, filteredUi(ui)); + }, + stop: function(event, ui) { + options.position = [ui.position.left - doc.scrollLeft(), + ui.position.top - doc.scrollTop()]; + $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); + self._trigger('dragStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }); + }, + + _makeResizable: function(handles) { + handles = (handles === undefined ? this.options.resizable : handles); + var self = this, + options = self.options, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = self.uiDialog.css('position'), + resizeHandles = (typeof handles === 'string' ? + handles : + 'n,e,s,w,se,sw,ne,nw' + ); + + function filteredUi(ui) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + self.uiDialog.resizable({ + cancel: '.ui-dialog-content', + containment: 'document', + alsoResize: self.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: self._minHeight(), + handles: resizeHandles, + start: function(event, ui) { + $(this).addClass("ui-dialog-resizing"); + self._trigger('resizeStart', event, filteredUi(ui)); + }, + resize: function(event, ui) { + self._trigger('resize', event, filteredUi(ui)); + }, + stop: function(event, ui) { + $(this).removeClass("ui-dialog-resizing"); + options.height = $(this).height(); + options.width = $(this).width(); + self._trigger('resizeStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }) + .css('position', position) + .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); + }, + + _minHeight: function() { + var options = this.options; + + if (options.height === 'auto') { + return options.minHeight; + } else { + return Math.min(options.minHeight, options.height); + } + }, + + _position: function(position) { + var myAt = [], + offset = [0, 0], + isVisible; + + if (position) { + // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( + // if (typeof position == 'string' || $.isArray(position)) { + // myAt = $.isArray(position) ? position : position.split(' '); + + if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { + myAt = position.split ? position.split(' ') : [position[0], position[1]]; + if (myAt.length === 1) { + myAt[1] = myAt[0]; + } + + $.each(['left', 'top'], function(i, offsetPosition) { + if (+myAt[i] === myAt[i]) { + offset[i] = myAt[i]; + myAt[i] = offsetPosition; + } + }); + + position = { + my: myAt.join(" "), + at: myAt.join(" "), + offset: offset.join(" ") + }; + } + + position = $.extend({}, $.ui.dialog.prototype.options.position, position); + } else { + position = $.ui.dialog.prototype.options.position; + } + + // need to show the dialog to get the actual offset in the position plugin + isVisible = this.uiDialog.is(':visible'); + if (!isVisible) { + this.uiDialog.show(); + } + this.uiDialog + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .position($.extend({ of: window }, position)); + if (!isVisible) { + this.uiDialog.hide(); + } + }, + + _setOptions: function( options ) { + var self = this, + resizableOptions = {}, + resize = false; + + $.each( options, function( key, value ) { + self._setOption( key, value ); + + if ( key in sizeRelatedOptions ) { + resize = true; + } + if ( key in resizableRelatedOptions ) { + resizableOptions[ key ] = value; + } + }); + + if ( resize ) { + this._size(); + } + if ( this.uiDialog.is( ":data(resizable)" ) ) { + this.uiDialog.resizable( "option", resizableOptions ); + } + }, + + _setOption: function(key, value){ + var self = this, + uiDialog = self.uiDialog; + + switch (key) { + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + case "beforeclose": + key = "beforeClose"; + break; + case "buttons": + self._createButtons(value); + break; + case "closeText": + // ensure that we always pass a string + self.uiDialogTitlebarCloseText.text("" + value); + break; + case "dialogClass": + uiDialog + .removeClass(self.options.dialogClass) + .addClass(uiDialogClasses + value); + break; + case "disabled": + if (value) { + uiDialog.addClass('ui-dialog-disabled'); + } else { + uiDialog.removeClass('ui-dialog-disabled'); + } + break; + case "draggable": + var isDraggable = uiDialog.is( ":data(draggable)" ); + if ( isDraggable && !value ) { + uiDialog.draggable( "destroy" ); + } + + if ( !isDraggable && value ) { + self._makeDraggable(); + } + break; + case "position": + self._position(value); + break; + case "resizable": + // currently resizable, becoming non-resizable + var isResizable = uiDialog.is( ":data(resizable)" ); + if (isResizable && !value) { + uiDialog.resizable('destroy'); + } + + // currently resizable, changing handles + if (isResizable && typeof value === 'string') { + uiDialog.resizable('option', 'handles', value); + } + + // currently non-resizable, becoming resizable + if (!isResizable && value !== false) { + self._makeResizable(value); + } + break; + case "title": + // convert whatever was passed in o a string, for html() to not throw up + $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); + break; + } + + $.Widget.prototype._setOption.apply(self, arguments); + }, + + _size: function() { + /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + * divs will both have width and height set, so we need to reset them + */ + var options = this.options, + nonContentHeight, + minContentHeight, + isVisible = this.uiDialog.is( ":visible" ); + + // reset content sizing + this.element.show().css({ + width: 'auto', + minHeight: 0, + height: 0 + }); + + if (options.minWidth > options.width) { + options.width = options.minWidth; + } + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: 'auto', + width: options.width + }) + .height(); + minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); + + if ( options.height === "auto" ) { + // only needed for IE6 support + if ( $.support.minHeight ) { + this.element.css({ + minHeight: minContentHeight, + height: "auto" + }); + } else { + this.uiDialog.show(); + var autoHeight = this.element.css( "height", "auto" ).height(); + if ( !isVisible ) { + this.uiDialog.hide(); + } + this.element.height( Math.max( autoHeight, minContentHeight ) ); + } + } else { + this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); + } + + if (this.uiDialog.is(':data(resizable)')) { + this.uiDialog.resizable('option', 'minHeight', this._minHeight()); + } + } +}); + +$.extend($.ui.dialog, { + version: "1.8.16", + + uuid: 0, + maxZ: 0, + + getTitleId: function($el) { + var id = $el.attr('id'); + if (!id) { + this.uuid += 1; + id = this.uuid; + } + return 'ui-dialog-title-' + id; + }, + + overlay: function(dialog) { + this.$el = $.ui.dialog.overlay.create(dialog); + } +}); + +$.extend($.ui.dialog.overlay, { + instances: [], + // reuse old instances due to IE memory leak with alpha transparency (see #5185) + oldInstances: [], + maxZ: 0, + events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), + function(event) { return event + '.dialog-overlay'; }).join(' '), + create: function(dialog) { + if (this.instances.length === 0) { + // prevent use of anchors and inputs + // we use a setTimeout in case the overlay is created from an + // event that we're going to be cancelling (see #2804) + setTimeout(function() { + // handle $(el).dialog().dialog('close') (see #4065) + if ($.ui.dialog.overlay.instances.length) { + $(document).bind($.ui.dialog.overlay.events, function(event) { + // stop events if the z-index of the target is < the z-index of the overlay + // we cannot return true when we don't want to cancel the event (#3523) + if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { + return false; + } + }); + } + }, 1); + + // allow closing by pressing the escape key + $(document).bind('keydown.dialog-overlay', function(event) { + if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + dialog.close(event); + event.preventDefault(); + } + }); + + // handle window resize + $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); + } + + var $el = (this.oldInstances.pop() || $('
      ').addClass('ui-widget-overlay')) + .appendTo(document.body) + .css({ + width: this.width(), + height: this.height() + }); + + if ($.fn.bgiframe) { + $el.bgiframe(); + } + + this.instances.push($el); + return $el; + }, + + destroy: function($el) { + var indexOf = $.inArray($el, this.instances); + if (indexOf != -1){ + this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); + } + + if (this.instances.length === 0) { + $([document, window]).unbind('.dialog-overlay'); + } + + $el.remove(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + var maxZ = 0; + $.each(this.instances, function() { + maxZ = Math.max(maxZ, this.css('z-index')); + }); + this.maxZ = maxZ; + }, + + height: function() { + var scrollHeight, + offsetHeight; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight + ); + offsetHeight = Math.max( + document.documentElement.offsetHeight, + document.body.offsetHeight + ); + + if (scrollHeight < offsetHeight) { + return $(window).height() + 'px'; + } else { + return scrollHeight + 'px'; + } + // handle "good" browsers + } else { + return $(document).height() + 'px'; + } + }, + + width: function() { + var scrollWidth, + offsetWidth; + // handle IE + if ( $.browser.msie ) { + scrollWidth = Math.max( + document.documentElement.scrollWidth, + document.body.scrollWidth + ); + offsetWidth = Math.max( + document.documentElement.offsetWidth, + document.body.offsetWidth + ); + + if (scrollWidth < offsetWidth) { + return $(window).width() + 'px'; + } else { + return scrollWidth + 'px'; + } + // handle "good" browsers + } else { + return $(document).width() + 'px'; + } + }, + + resize: function() { + /* If the dialog is draggable and the user drags it past the + * right edge of the window, the document becomes wider so we + * need to stretch the overlay. If the user then drags the + * dialog back to the left, the document will become narrower, + * so we need to shrink the overlay to the appropriate size. + * This is handled by shrinking the overlay before setting it + * to the full document size. + */ + var $overlays = $([]); + $.each($.ui.dialog.overlay.instances, function() { + $overlays = $overlays.add(this); + }); + + $overlays.css({ + width: 0, + height: 0 + }).css({ + width: $.ui.dialog.overlay.width(), + height: $.ui.dialog.overlay.height() + }); + } +}); + +$.extend($.ui.dialog.overlay.prototype, { + destroy: function() { + $.ui.dialog.overlay.destroy(this.$el); + } +}); + +}(jQuery)); +/* + * jQuery UI Position 1.8.16 + * + * 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/Position + */ +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, + verticalPositions = /top|center|bottom/, + center = "center", + _position = $.fn.position, + _offset = $.fn.offset; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var target = $( options.of ), + targetElem = target[0], + collision = ( options.collision || "flip" ).split( " " ), + offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], + targetWidth, + targetHeight, + basePosition; + + if ( targetElem.nodeType === 9 ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: 0, left: 0 }; + // TODO: use $.isWindow() in 1.9 + } else if ( targetElem.setTimeout ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; + } else if ( targetElem.preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + targetWidth = targetHeight = 0; + basePosition = { top: options.of.pageY, left: options.of.pageX }; + } else { + targetWidth = target.outerWidth(); + targetHeight = target.outerHeight(); + basePosition = target.offset(); + } + + // force my and at to have valid horizontal and veritcal positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[this] || "" ).split( " " ); + if ( pos.length === 1) { + pos = horizontalPositions.test( pos[0] ) ? + pos.concat( [center] ) : + verticalPositions.test( pos[0] ) ? + [ center ].concat( pos ) : + [ center, center ]; + } + pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; + pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; + options[ this ] = pos; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + // normalize offset option + offset[ 0 ] = parseInt( offset[0], 10 ) || 0; + if ( offset.length === 1 ) { + offset[ 1 ] = offset[ 0 ]; + } + offset[ 1 ] = parseInt( offset[1], 10 ) || 0; + + if ( options.at[0] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[0] === center ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[1] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[1] === center ) { + basePosition.top += targetHeight / 2; + } + + basePosition.left += offset[ 0 ]; + basePosition.top += offset[ 1 ]; + + return this.each(function() { + var elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, + marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, + collisionWidth = elemWidth + marginLeft + + ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), + collisionHeight = elemHeight + marginTop + + ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), + position = $.extend( {}, basePosition ), + collisionPosition; + + if ( options.my[0] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[0] === center ) { + position.left -= elemWidth / 2; + } + + if ( options.my[1] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[1] === center ) { + position.top -= elemHeight / 2; + } + + // prevent fractions (see #5280) + position.left = Math.round( position.left ); + position.top = Math.round( position.top ); + + collisionPosition = { + left: position.left - marginLeft, + top: position.top - marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[i] ] ) { + $.ui.position[ collision[i] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: offset, + my: options.my, + at: options.at + }); + } + }); + + if ( $.fn.bgiframe ) { + elem.bgiframe(); + } + elem.offset( $.extend( position, { using: options.using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); + position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); + }, + top: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); + position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); + } + }, + + flip: { + left: function( position, data ) { + if ( data.at[0] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + -data.targetWidth, + offset = -2 * data.offset[ 0 ]; + position.left += data.collisionPosition.left < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + }, + top: function( position, data ) { + if ( data.at[1] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), + myOffset = data.my[ 1 ] === "top" ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + -data.targetHeight, + offset = -2 * data.offset[ 1 ]; + position.top += data.collisionPosition.top < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + } + } +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { + $.offset.setOffset = function( elem, options ) { + // set position first, in-case top/left are set even on static elem + if ( /static/.test( $.curCSS( elem, "position" ) ) ) { + elem.style.position = "relative"; + } + var curElem = $( elem ), + curOffset = curElem.offset(), + curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, + curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, + props = { + top: (options.top - curOffset.top) + curTop, + left: (options.left - curOffset.left) + curLeft + }; + + if ( 'using' in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + }; + + $.fn.offset = function( options ) { + var elem = this[ 0 ]; + if ( !elem || !elem.ownerDocument ) { return null; } + if ( options ) { + return this.each(function() { + $.offset.setOffset( this, options ); + }); + } + return _offset.call( this ); + }; +} + +}( jQuery )); +/* + * jQuery UI Progressbar 1.8.16 + * + * 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/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.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 = $( "
      " ) + .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(); + + $.Widget.prototype.destroy.apply( this, arguments ); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this._value(); + } + + this._setOption( "value", newValue ); + return this; + }, + + _setOption: function( key, value ) { + if ( key === "value" ) { + this.options.value = value; + this._refreshValue(); + if ( this._value() === this.options.max ) { + this._trigger( "complete" ); + } + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + _value: function() { + var val = this.options.value; + // normalize invalid value + if ( typeof val !== "number" ) { + val = 0; + } + return Math.min( this.options.max, Math.max( this.min, val ) ); + }, + + _percentage: function() { + return 100 * this._value() / this.options.max; + }, + + _refreshValue: function() { + var value = this.value(); + var percentage = this._percentage(); + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + + this.valueDiv + .toggle( value > this.min ) + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); + this.element.attr( "aria-valuenow", value ); + } +}); + +$.extend( $.ui.progressbar, { + version: "1.8.16" +}); + +})( jQuery ); +/* + * jQuery UI Slider 1.8.16 + * + * 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/Slider + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +// number of pages in a slider +// (how many times can you page up/down to go through the whole range) +var numPages = 5; + +$.widget( "ui.slider", $.ui.mouse, { + + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null + }, + + _create: function() { + var self = this, + o = this.options, + existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), + handle = "", + handleCount = ( o.values && o.values.length ) || 1, + handles = []; + + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" + + ( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) ); + + this.range = $([]); + + if ( o.range ) { + if ( o.range === true ) { + if ( !o.values ) { + o.values = [ this._valueMin(), this._valueMin() ]; + } + if ( o.values.length && o.values.length !== 2 ) { + o.values = [ o.values[0], o.values[0] ]; + } + } + + this.range = $( "
      " ) + .appendTo( this.element ) + .addClass( "ui-slider-range" + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + " ui-widget-header" + + ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) ); + } + + for ( var i = existingHandles.length; i < handleCount; i += 1 ) { + handles.push( handle ); + } + + this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) ); + + this.handle = this.handles.eq( 0 ); + + this.handles.add( this.range ).filter( "a" ) + .click(function( event ) { + event.preventDefault(); + }) + .hover(function() { + if ( !o.disabled ) { + $( this ).addClass( "ui-state-hover" ); + } + }, function() { + $( this ).removeClass( "ui-state-hover" ); + }) + .focus(function() { + if ( !o.disabled ) { + $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); + $( this ).addClass( "ui-state-focus" ); + } else { + $( this ).blur(); + } + }) + .blur(function() { + $( this ).removeClass( "ui-state-focus" ); + }); + + this.handles.each(function( i ) { + $( this ).data( "index.ui-slider-handle", i ); + }); + + this.handles + .keydown(function( event ) { + var ret = true, + index = $( this ).data( "index.ui-slider-handle" ), + allowed, + curVal, + newVal, + step; + + if ( self.options.disabled ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + ret = false; + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + allowed = self._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = self.options.step; + if ( self.options.values && self.options.values.length ) { + curVal = newVal = self.values( index ); + } else { + curVal = newVal = self.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = self._valueMin(); + break; + case $.ui.keyCode.END: + newVal = self._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === self._valueMax() ) { + return; + } + newVal = self._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === self._valueMin() ) { + return; + } + newVal = self._trimAlignValue( curVal - step ); + break; + } + + self._slide( event, index, newVal ); + + return ret; + + }) + .keyup(function( event ) { + var index = $( this ).data( "index.ui-slider-handle" ); + + if ( self._keySliding ) { + self._keySliding = false; + self._stop( event, index ); + self._change( event, index ); + $( this ).removeClass( "ui-state-active" ); + } + + }); + + this._refreshValue(); + + this._animateOff = false; + }, + + destroy: function() { + this.handles.remove(); + this.range.remove(); + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-slider-disabled" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ) + .removeData( "slider" ) + .unbind( ".slider" ); + + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function( event ) { + var o = this.options, + position, + normValue, + distance, + closestHandle, + self, + index, + allowed, + offset, + mouseOverHandle; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + self = this; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - self.values(i) ); + if ( distance > thisDistance ) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + // workaround for bug #3736 (if both handles of a range are at 0, + // the first is always used as the one with least distance, + // and moving it is obviously prevented by preventing negative ranges) + if( o.range === true && this.values(1) === o.min ) { + index += 1; + closestHandle = $( this.handles[index] ); + } + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + self._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + if ( !this.handles.hasClass( "ui-state-hover" ) ) { + this._slide( event, index, normValue ); + } + this._animateOff = true; + return true; + }, + + _mouseStart: function( event ) { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal, true ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + return; + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + return; + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + + switch ( key ) { + case "disabled": + if ( value ) { + this.handles.filter( ".ui-state-focus" ).blur(); + this.handles.removeClass( "ui-state-hover" ); + this.handles.propAttr( "disabled", true ); + this.element.addClass( "ui-disabled" ); + } else { + this.handles.propAttr( "disabled", false ); + this.element.removeClass( "ui-disabled" ); + } + break; + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val <= this._valueMin() ) { + return this._valueMin(); + } + if ( val >= this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = (val - this._valueMin()) % step, + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.options.max; + }, + + _refreshValue: function() { + var oRange = this.options.range, + o = this.options, + self = this, + animate = ( !this._animateOff ) ? o.animate : false, + valPercent, + _set = {}, + lastValPercent, + value, + valueMin, + valueMax; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i, j ) { + valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( self.options.range === true ) { + if ( self.orientation === "horizontal" ) { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + +}); + +$.extend( $.ui.slider, { + version: "1.8.16" +}); + +}(jQuery)); +/* + * jQuery UI Tabs 1.8.16 + * + * 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/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var tabId = 0, + listId = 0; + +function getNextTabId() { + return ++tabId; +} + +function getNextListId() { + return ++listId; +} + +$.widget( "ui.tabs", { + options: { + add: null, + ajaxOptions: null, + cache: false, + cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } + collapsible: false, + disable: null, + disabled: [], + enable: null, + event: "click", + fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + idPrefix: "ui-tabs-", + load: null, + panelTemplate: "
      ", + remove: null, + select: null, + show: null, + spinner: "Loading…", + tabTemplate: "
    • #{label}
    • " + }, + + _create: function() { + this._tabify( true ); + }, + + _setOption: function( key, value ) { + if ( key == "selected" ) { + if (this.options.collapsible && value == this.options.selected ) { + return; + } + this.select( value ); + } else { + this.options[ key ] = value; + this._tabify(); + } + }, + + _tabId: function( a ) { + return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) || + this.options.idPrefix + getNextTabId(); + }, + + _sanitizeSelector: function( hash ) { + // we need this because an id may contain a ":" + return hash.replace( /:/g, "\\:" ); + }, + + _cookie: function() { + var cookie = this.cookie || + ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ); + return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) ); + }, + + _ui: function( tab, panel ) { + return { + tab: tab, + panel: panel, + index: this.anchors.index( tab ) + }; + }, + + _cleanup: function() { + // restore all former loading tabs labels + this.lis.filter( ".ui-state-processing" ) + .removeClass( "ui-state-processing" ) + .find( "span:data(label.tabs)" ) + .each(function() { + var el = $( this ); + el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" ); + }); + }, + + _tabify: function( init ) { + var self = this, + o = this.options, + fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash + + this.list = this.element.find( "ol,ul" ).eq( 0 ); + this.lis = $( " > li:has(a[href])", this.list ); + this.anchors = this.lis.map(function() { + return $( "a", this )[ 0 ]; + }); + this.panels = $( [] ); + + this.anchors.each(function( i, a ) { + var href = $( a ).attr( "href" ); + // For dynamically created HTML that contains a hash as href IE < 8 expands + // such href to the full page url with hash and then misinterprets tab as ajax. + // Same consideration applies for an added tab with a fragment identifier + // since a[href=#fragment-identifier] does unexpectedly not match. + // Thus normalize href attribute... + var hrefBase = href.split( "#" )[ 0 ], + baseEl; + if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] || + ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) { + href = a.hash; + a.href = href; + } + + // inline tab + if ( fragmentId.test( href ) ) { + self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) ); + // remote tab + // prevent loading the page itself if href is just "#" + } else if ( href && href !== "#" ) { + // required for restore on destroy + $.data( a, "href.tabs", href ); + + // TODO until #3808 is fixed strip fragment identifier from url + // (IE fails to load from such url) + $.data( a, "load.tabs", href.replace( /#.*$/, "" ) ); + + var id = self._tabId( a ); + a.href = "#" + id; + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .insertAfter( self.panels[ i - 1 ] || self.list ); + $panel.data( "destroy.tabs", true ); + } + self.panels = self.panels.add( $panel ); + // invalid tab href + } else { + o.disabled.push( i ); + } + }); + + // initialization from scratch + if ( init ) { + // attach necessary classes for styling + 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" ); + + // Selected tab + // use "selected" option or try to retrieve: + // 1. from fragment identifier in url + // 2. from cookie + // 3. from selected class attribute on
    • + if ( o.selected === undefined ) { + if ( location.hash ) { + this.anchors.each(function( i, a ) { + if ( a.hash == location.hash ) { + o.selected = i; + return false; + } + }); + } + if ( typeof o.selected !== "number" && o.cookie ) { + o.selected = parseInt( self._cookie(), 10 ); + } + if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + o.selected = o.selected || ( this.lis.length ? 0 : -1 ); + } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release + o.selected = -1; + } + + // sanity check - default to first tab... + o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 ) + ? o.selected + : 0; + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + // A selected tab cannot become disabled. + o.disabled = $.unique( o.disabled.concat( + $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) { + return self.lis.index( n ); + }) + ) ).sort(); + + if ( $.inArray( o.selected, o.disabled ) != -1 ) { + o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 ); + } + + // highlight selected tab + this.panels.addClass( "ui-tabs-hide" ); + this.lis.removeClass( "ui-tabs-selected ui-state-active" ); + // check for length avoids error when initializing empty list + if ( o.selected >= 0 && this.anchors.length ) { + self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" ); + this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" ); + + // seems to be expected behavior that the show callback is fired + self.element.queue( "tabs", function() { + self._trigger( "show", null, + self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) ); + }); + + this.load( o.selected ); + } + + // clean up to avoid memory leaks in certain versions of IE 6 + // TODO: namespace this event + $( window ).bind( "unload", function() { + self.lis.add( self.anchors ).unbind( ".tabs" ); + self.lis = self.anchors = self.panels = null; + }); + // update selected after add/remove + } else { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + + // update collapsible + // TODO: use .toggleClass() + this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" ); + + // set or update cookie after init and add/remove respectively + if ( o.cookie ) { + this._cookie( o.selected, o.cookie ); + } + + // disable tabs + for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { + $( li )[ $.inArray( i, o.disabled ) != -1 && + // TODO: use .toggleClass() + !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" ); + } + + // reset cache if switching from cached to not cached + if ( o.cache === false ) { + this.anchors.removeData( "cache.tabs" ); + } + + // remove all handlers before, tabify may run on existing tabs after add or option change + this.lis.add( this.anchors ).unbind( ".tabs" ); + + if ( o.event !== "mouseover" ) { + var addState = function( state, el ) { + if ( el.is( ":not(.ui-state-disabled)" ) ) { + el.addClass( "ui-state-" + state ); + } + }; + var removeState = function( state, el ) { + el.removeClass( "ui-state-" + state ); + }; + this.lis.bind( "mouseover.tabs" , function() { + addState( "hover", $( this ) ); + }); + this.lis.bind( "mouseout.tabs", function() { + removeState( "hover", $( this ) ); + }); + this.anchors.bind( "focus.tabs", function() { + addState( "focus", $( this ).closest( "li" ) ); + }); + this.anchors.bind( "blur.tabs", function() { + removeState( "focus", $( this ).closest( "li" ) ); + }); + } + + // set up animations + var hideFx, showFx; + if ( o.fx ) { + if ( $.isArray( o.fx ) ) { + hideFx = o.fx[ 0 ]; + showFx = o.fx[ 1 ]; + } else { + hideFx = showFx = o.fx; + } + } + + // Reset certain styles left over from animation + // and prevent IE's ClearType bug... + function resetStyle( $el, fx ) { + $el.css( "display", "" ); + if ( !$.support.opacity && fx.opacity ) { + $el[ 0 ].style.removeAttribute( "filter" ); + } + } + + // Show a tab... + var showTab = showFx + ? function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way + .animate( showFx, showFx.duration || "normal", function() { + resetStyle( $show, showFx ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }); + } + : function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.removeClass( "ui-tabs-hide" ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }; + + // Hide a tab, $show is optional... + var hideTab = hideFx + ? function( clicked, $hide ) { + $hide.animate( hideFx, hideFx.duration || "normal", function() { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + resetStyle( $hide, hideFx ); + self.element.dequeue( "tabs" ); + }); + } + : function( clicked, $hide, $show ) { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + self.element.dequeue( "tabs" ); + }; + + // attach tab event handler, unbind to avoid duplicates from former tabifying... + this.anchors.bind( o.event + ".tabs", function() { + var el = this, + $li = $(el).closest( "li" ), + $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), + $show = self.element.find( self._sanitizeSelector( el.hash ) ); + + // If tab is already selected and not collapsible or tab disabled or + // or is already loading or click callback returns false stop here. + // Check if click handler returns false last so that it is not executed + // for a disabled or loading tab! + if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || + $li.hasClass( "ui-state-disabled" ) || + $li.hasClass( "ui-state-processing" ) || + self.panels.filter( ":animated" ).length || + self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) { + this.blur(); + return false; + } + + o.selected = self.anchors.index( this ); + + self.abort(); + + // if tab may be closed + if ( o.collapsible ) { + if ( $li.hasClass( "ui-tabs-selected" ) ) { + o.selected = -1; + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }).dequeue( "tabs" ); + + this.blur(); + return false; + } else if ( !$hide.length ) { + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 + self.load( self.anchors.index( this ) ); + + this.blur(); + return false; + } + } + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + // show new tab + if ( $show.length ) { + if ( $hide.length ) { + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }); + } + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + self.load( self.anchors.index( this ) ); + } else { + throw "jQuery UI Tabs: Mismatching fragment identifier."; + } + + // Prevent IE from keeping other link focussed when using the back button + // and remove dotted border from clicked link. This is controlled via CSS + // in modern browsers; blur() removes focus from address bar in Firefox + // which can become a usability and annoying problem with tabs('rotate'). + if ( $.browser.msie ) { + this.blur(); + } + }); + + // disable click in any case + this.anchors.bind( "click.tabs", function(){ + return false; + }); + }, + + _getIndex: function( index ) { + // meta-function to give users option to provide a href string instead of a numerical index. + // also sanitizes numerical indexes to valid values. + if ( typeof index == "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) ); + } + + return index; + }, + + destroy: function() { + var o = 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 href = $.data( this, "href.tabs" ); + if ( href ) { + this.href = href; + } + var $this = $( this ).unbind( ".tabs" ); + $.each( [ "href", "load", "cache" ], function( i, prefix ) { + $this.removeData( prefix + ".tabs" ); + }); + }); + + this.lis.unbind( ".tabs" ).add( this.panels ).each(function() { + if ( $.data( this, "destroy.tabs" ) ) { + $( this ).remove(); + } else { + $( this ).removeClass([ + "ui-state-default", + "ui-corner-top", + "ui-tabs-selected", + "ui-state-active", + "ui-state-hover", + "ui-state-focus", + "ui-state-disabled", + "ui-tabs-panel", + "ui-widget-content", + "ui-corner-bottom", + "ui-tabs-hide" + ].join( " " ) ); + } + }); + + if ( o.cookie ) { + this._cookie( null, o.cookie ); + } + + return this; + }, + + add: function( url, label, index ) { + if ( index === undefined ) { + index = this.anchors.length; + } + + var self = this, + o = this.options, + $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), + id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); + + $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); + + // try to find an existing element before creating a new one + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .data( "destroy.tabs", true ); + } + $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" ); + + if ( index >= this.lis.length ) { + $li.appendTo( this.list ); + $panel.appendTo( this.list[ 0 ].parentNode ); + } else { + $li.insertBefore( this.lis[ index ] ); + $panel.insertBefore( this.panels[ index ] ); + } + + o.disabled = $.map( o.disabled, function( n, i ) { + return n >= index ? ++n : n; + }); + + this._tabify(); + + if ( this.anchors.length == 1 ) { + o.selected = 0; + $li.addClass( "ui-tabs-selected ui-state-active" ); + $panel.removeClass( "ui-tabs-hide" ); + this.element.queue( "tabs", function() { + self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) ); + }); + + this.load( 0 ); + } + + this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + remove: function( index ) { + index = this._getIndex( index ); + var o = this.options, + $li = this.lis.eq( index ).remove(), + $panel = this.panels.eq( index ).remove(); + + // If selected tab was removed focus tab to the right or + // in case the last tab was removed the tab to the left. + if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) { + this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); + } + + o.disabled = $.map( + $.grep( o.disabled, function(n, i) { + return n != index; + }), + function( n, i ) { + return n >= index ? --n : n; + }); + + this._tabify(); + + this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); + return this; + }, + + enable: function( index ) { + index = this._getIndex( index ); + var o = this.options; + if ( $.inArray( index, o.disabled ) == -1 ) { + return; + } + + this.lis.eq( index ).removeClass( "ui-state-disabled" ); + o.disabled = $.grep( o.disabled, function( n, i ) { + return n != index; + }); + + this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + disable: function( index ) { + index = this._getIndex( index ); + var self = this, o = this.options; + // cannot disable already selected tab + if ( index != o.selected ) { + this.lis.eq( index ).addClass( "ui-state-disabled" ); + + o.disabled.push( index ); + o.disabled.sort(); + + this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + } + + return this; + }, + + select: function( index ) { + index = this._getIndex( index ); + if ( index == -1 ) { + if ( this.options.collapsible && this.options.selected != -1 ) { + index = this.options.selected; + } else { + return this; + } + } + this.anchors.eq( index ).trigger( this.options.event + ".tabs" ); + return this; + }, + + load: function( index ) { + index = this._getIndex( index ); + var self = this, + o = this.options, + a = this.anchors.eq( index )[ 0 ], + url = $.data( a, "load.tabs" ); + + this.abort(); + + // not remote or from cache + if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) { + this.element.dequeue( "tabs" ); + return; + } + + // load remote from here on + this.lis.eq( index ).addClass( "ui-state-processing" ); + + if ( o.spinner ) { + var span = $( "span", a ); + span.data( "label.tabs", span.html() ).html( o.spinner ); + } + + this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, { + url: url, + success: function( r, s ) { + self.element.find( self._sanitizeSelector( a.hash ) ).html( r ); + + // take care of tab labels + self._cleanup(); + + if ( o.cache ) { + $.data( a, "cache.tabs", true ); + } + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + o.ajaxOptions.success( r, s ); + } + catch ( e ) {} + }, + error: function( xhr, s, e ) { + // take care of tab labels + self._cleanup(); + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + // Passing index avoid a race condition when this method is + // called after the user has selected another tab. + // Pass the anchor that initiated this request allows + // loadError to manipulate the tab content panel via $(a.hash) + o.ajaxOptions.error( xhr, s, index, a ); + } + catch ( e ) {} + } + } ) ); + + // last, so that load event is fired before show... + self.element.dequeue( "tabs" ); + + return this; + }, + + abort: function() { + // stop possibly running animations + this.element.queue( [] ); + this.panels.stop( false, true ); + + // "tabs" queue must not contain more than two elements, + // which are the callbacks for the latest clicked tab... + this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) ); + + // terminate pending requests from other tabs + if ( this.xhr ) { + this.xhr.abort(); + delete this.xhr; + } + + // take care of tab labels + this._cleanup(); + return this; + }, + + url: function( index, url ) { + this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url ); + return this; + }, + + length: function() { + return this.anchors.length; + } +}); + +$.extend( $.ui.tabs, { + version: "1.8.16" +}); + +/* + * Tabs Extensions + */ + +/* + * Rotate + */ +$.extend( $.ui.tabs.prototype, { + rotation: null, + rotate: function( ms, continuing ) { + var self = this, + o = this.options; + + var rotate = self._rotate || ( self._rotate = function( e ) { + clearTimeout( self.rotation ); + self.rotation = setTimeout(function() { + var t = o.selected; + self.select( ++t < self.anchors.length ? t : 0 ); + }, ms ); + + if ( e ) { + e.stopPropagation(); + } + }); + + var stop = self._unrotate || ( self._unrotate = !continuing + ? function(e) { + if (e.clientX) { // in case of a true click + self.rotate(null); + } + } + : function( e ) { + t = o.selected; + rotate(); + }); + + // start rotation + if ( ms ) { + this.element.bind( "tabsshow", rotate ); + this.anchors.bind( o.event + ".tabs", stop ); + rotate(); + // stop rotation + } else { + clearTimeout( self.rotation ); + this.element.unbind( "tabsshow", rotate ); + this.anchors.unbind( o.event + ".tabs", stop ); + delete this._rotate; + delete this._unrotate; + } + + return this; + } +}); + +})( jQuery ); diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.min.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.min.js new file mode 100644 index 0000000..14c9064 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery-ui.min.js @@ -0,0 +1,791 @@ +/*! + * jQuery UI 1.8.16 + * + * 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(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16", +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}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= +this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, +"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": +"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, +outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, +"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&& +a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= +false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_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(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.16 + * + * 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/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.16 + * + * 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/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('
      ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options; +this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.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};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); +this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, +_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.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";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= +false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, +10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| +!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& +a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= +this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.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()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,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 a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, +(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= +"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), +10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ +this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& +!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.leftg[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.topg[3])?h:!(h-this.offset.click.topg[2])?e:!(e-this.offset.click.left=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= +i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f
    • ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d
      ');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); +var b=function(c){e(c).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 a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a= +false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"}); +this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff= +{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis]; +if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.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(c);this._trigger("resize",b,this.ui());return false}, +_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f, +{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight: +Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(cb.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left= +null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a
      ');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ +a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+ +c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]); +b!="resize"&&this._trigger(b,a,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}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(), +10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top- +f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType? +e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a= +e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing, +step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= +e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset; +var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left: +a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top- +d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition, +f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, +display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b= +e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height= +d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Selectable 1.8.16 + * + * 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/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
      ")},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(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", +c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= +this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,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")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a=== +"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&& +!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);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");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; +this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!= +document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a); +return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0], +e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset(); +c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=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 b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(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();d.extend(this,{helper:null, +dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")}, +toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"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(a){var b=[],c=[],e=this._connectWith(); +if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), +this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b= +this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f= +d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")|| +0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out", +a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- +f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g- +this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this, +this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop", +a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); +a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", +function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a= +this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.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 a=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 b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); +b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); +a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ +c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; +if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.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); +if(!b){a.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);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){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 g=this.active.next(), +e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| +e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", +"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.16", +animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/); +f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", +paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +;/* + * jQuery UI Autocomplete 1.8.16 + * + * 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/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g= +false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= +a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; +this.menu=d("
        ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& +a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& +b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else 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",b).append(d("").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); +this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},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(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, +this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| +this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("");e.secondary&&a.append("");if(!this.options.text){d.push(f?"ui-button-icons-only": +"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.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(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")=== +"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); +b.Widget.prototype.destroy.call(this)}})})(jQuery); +;/* + * jQuery UI Dialog 1.8.16 + * + * 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/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, +position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
        ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ +b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
        ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), +h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", +e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.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(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== +b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()};c.ui.dialog.maxZ+=1; +d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== +f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
        ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
        ").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a, +function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", +handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition, +originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"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:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize", +f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).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(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "): +[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f); +if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"): +e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a= +this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height- +b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()
        ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&& +c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j"); +this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle", +g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length? +(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i- +m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); +return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false; +this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b= +this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b= +this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(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 f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a= +this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e- +g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"}, +b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery); +;/* + * jQuery UI Tabs 1.8.16 + * + * 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/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,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(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= +d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| +(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); +this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ +g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", +function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; +this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= +-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; +d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},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 e= +d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(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")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, +e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); +j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); +if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, +this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, +load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, +"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, +url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k'))}function N(a){return a.bind("mouseout", +function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); +b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv}, +setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g, +"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
        '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!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(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c== +"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker(): +d.datepicker._showDatepicker(a[0]);return false})}},_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 e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(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=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+= +1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/ +2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b= +d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="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)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e= +a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a, +"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f== +a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input", +a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value= +"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b); +c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing= +true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}); +a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&& +!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(), +h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b= +this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b); +this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): +0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[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(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).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){a=d(a); +this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.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"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/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 e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},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 e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames: +null)||this._defaults.monthNames;var i=function(o){(o=k+1 +12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&& +a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? +new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); +n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m, +g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+s+"":f?"":''+s+"";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&& +a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
        '+(c?h:"")+(this._isInRange(a,s)?'":"")+(c?"":h)+"
        ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
        '+(/all|left/.test(t)&& +x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
        ';var z=j?'":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="=5?' class="ui-datepicker-week-end"':"")+'>'+q[r]+""}y+=z+"";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&ro;R+='";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+""}g++;if(g>11){g=0;m++}y+="
        '+this._get(a,"weekHeader")+"
        '+this._get(a,"calculateWeek")(r)+""+(F&&!D?" ":L?''+ +r.getDate()+"":''+r.getDate()+"")+"
        "+(l?""+(i[0]>0&&G==i[1]-1?'
        ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
        ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b, +e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
        ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+ +(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input? +a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_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,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c, +e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.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,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this; +if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a== +"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.16 + * + * 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/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.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=b("
        ").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();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(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(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery); +;/* + * jQuery UI Effects 1.8.16 + * + * 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/Effects/ + */ +jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; +f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, +[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), +d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement; +if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)}); +return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this, +arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/ +2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b, +d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c, +a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b, +d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.16 + * + * 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/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.16 + * + * 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/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.16 + * + * 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/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.16 + * + * 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/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.js new file mode 100644 index 0000000..d75b4f3 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.js @@ -0,0 +1,80 @@ +/* + * jQuery UI Effects Blind 1.9pre + * + * 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/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +var rvertical = /up|down|vertical/, + rpositivemotion = /up|left|vertical|horizontal/; + +$.effects.effect.blind = function( o, done ) { + // Create element + var el = $( this ), + props = [ "position", "top", "bottom", "left", "right", "height", "width" ], + mode = $.effects.setMode( el, o.mode || "hide" ), + direction = o.direction || "up", + vertical = rvertical.test( direction ), + ref = vertical ? "height" : "width", + ref2 = vertical ? "top" : "left", + motion = rpositivemotion.test( direction ), + animation = {}, + show = mode === "show", + wrapper, distance, top; + + // if already wrapped, the wrapper's properties are my property. #6245 + if ( el.parent().is( ".ui-effects-wrapper" ) ) { + $.effects.save( el.parent(), props ); + } else { + $.effects.save( el, props ); + } + el.show(); + top = parseInt(el.css('top'), 10); + wrapper = $.effects.createWrapper( el ).css({ + overflow: "hidden" + }); + + distance = vertical ? wrapper[ ref ]() + top : wrapper[ ref ](); + + animation[ ref ] = show ? distance : 0; + if ( !motion ) { + el + .css( vertical ? "bottom" : "right", 0 ) + .css( vertical ? "top" : "left", "" ) + .css({ position: "absolute" }); + animation[ ref2 ] = show ? 0 : distance; + } + + // start at 0 if we are showing + if ( show ) { + wrapper.css( ref, 0 ); + if ( ! motion ) { + wrapper.css( ref2, distance ); + } + } + + // Animate + wrapper.animate( animation, { + duration: o.duration, + easing: o.easing, + queue: false, + complete: function() { + if ( mode === "hide" ) { + el.hide(); + } + $.effects.restore( el, props ); + $.effects.removeWrapper( el ); + done(); + } + }); + +}; + +})(jQuery); diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js new file mode 100644 index 0000000..101c15d --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.blind.min.js @@ -0,0 +1,14 @@ +/* + * jQuery UI Effects Blind 1.9pre + * + * 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/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function(b){var n=/up|down|vertical/,o=/up|left|vertical|horizontal/;b.effects.effect.blind=function(g,p){var a=b(this),i=["position","top","bottom","left","right","height","width"],l=b.effects.setMode(a,g.mode||"hide"),e=g.direction||"up",f=n.test(e),h=f?"height":"width",m=f?"top":"left";e=o.test(e);var j={},k=l==="show",c,d;a.parent().is(".ui-effects-wrapper")?b.effects.save(a.parent(),i):b.effects.save(a,i);a.show();d=parseInt(a.css("top"),10);c=b.effects.createWrapper(a).css({overflow:"hidden"}); +d=f?c[h]()+d:c[h]();j[h]=k?d:0;if(!e){a.css(f?"bottom":"right",0).css(f?"top":"left","").css({position:"absolute"});j[m]=k?0:d}if(k){c.css(h,0);e||c.css(m,d)}c.animate(j,{duration:g.duration,easing:g.easing,queue:false,complete:function(){l==="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);p()}})}})(jQuery); diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.js new file mode 100644 index 0000000..ab9349a --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.js @@ -0,0 +1,890 @@ +/* + * jQuery UI Effects 1.9pre + * + * 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/Effects/ + */ +;jQuery.effects || (function($, undefined) { + +var backCompat = $.uiBackCompat !== false; + +$.effects = { + effect: {} +}; + +/******************************************************************************/ +/****************************** COLOR ANIMATIONS ******************************/ +/******************************************************************************/ + +// override the animation for color styles +$.each(["backgroundColor", "borderBottomColor", "borderLeftColor", + "borderRightColor", "borderTopColor", "borderColor", "color", "outlineColor"], +function(i, attr) { + $.fx.step[attr] = function(fx) { + if (!fx.colorInit) { + fx.start = getColor(fx.elem, attr); + fx.end = getRGB(fx.end); + fx.colorInit = true; + } + + fx.elem.style[attr] = "rgb(" + + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + "," + + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + "," + + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ")"; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor === Array && color.length === 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors["transparent"]; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != "" && color !== "transparent" || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ + +var classAnimationActions = [ "add", "remove", "toggle" ], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }, + // prefix used for storing data on .data() + dataSpace = "ec.storage."; + +$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) { + $.fx.step[ prop ] = function( fx ) { + if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { + jQuery.style( fx.elem, prop, fx.end ); + fx.setAttr = true; + } + }; +}); + +function getElementStyles() { + var style = this.ownerDocument.defaultView + ? this.ownerDocument.defaultView.getComputedStyle( this, null ) + : this.currentStyle, + newStyle = {}, + key, + camelCase, + len; + + // webkit enumerates style porperties + if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { + len = style.length; + while ( len-- ) { + key = style[ len ]; + if ( typeof style[ key ] === "string" ) { + newStyle[ $.camelCase( key ) ] = style[ key ]; + } + } + } else { + for ( key in style ) { + if ( typeof style[ key ] === "string" ) { + newStyle[ key ] = style[ key ]; + } + } + } + + return newStyle; +} + + +function styleDifference( oldStyle, newStyle ) { + var diff = {}, + name, value; + + for ( name in newStyle ) { + value = newStyle[ name ]; + if ( oldStyle[ name ] != value ) { + if ( !shorthandStyles[ name ] ) { + if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { + diff[ name ] = value; + } + } + } + } + + return diff; +} + +$.effects.animateClass = function( value, duration, easing, callback ) { + var o = $.speed( duration, easing, callback ); + + return this.queue( function() { + var animated = $( this ), + baseClass = animated.attr( "class" ) || "", + finalClass, + allAnimations = o.children ? animated.find( "*" ).andSelf() : animated; + + // map the animated objects to store the original styles. + allAnimations = allAnimations.map(function() { + var el = $( this ); + return { + el: el, + originalStyleAttr: el.attr( "style" ) || " ", + start: getElementStyles.call( this ) + }; + }); + + // apply class change + $.each( classAnimationActions, function(i, action) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + }); + finalClass = animated.attr( "class" ); + + // map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map(function() { + this.end = getElementStyles.call( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + }); + + // apply original class + animated.attr( "class", baseClass ); + + // map all animated objects again - this time collecting a promise + allAnimations = allAnimations.map(function() { + var styleInfo = this, + dfd = $.Deferred(); + + this.el.animate( this.diff, { + duration: o.duration, + easing: o.easing, + queue: false, + complete: function() { + dfd.resolve( styleInfo ); + } + }); + return dfd.promise(); + }); + + // once all animations have completed: + $.when.apply( $, allAnimations.get() ).done(function() { + + // set the final class + animated.attr( "class", finalClass ); + + // for each animated element + $.each( arguments, function() { + if ( typeof this.el.attr( "style" ) === "object" ) { + this.el.attr( "style" ).cssText = ""; + this.el.attr( "style" ).cssText = this.originalStyleAttr; + } else { + this.el.attr( "style", this.originalStyleAttr ); + } + }); + + // this is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + o.complete.call( animated[ 0 ] ); + }); + }); +}; + +$.fn.extend({ + _addClass: $.fn.addClass, + addClass: function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.apply( this, [{ add: classNames }, speed, easing, callback ]) : + this._addClass(classNames); + }, + + _removeClass: $.fn.removeClass, + removeClass: function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.apply( this, [{ remove: classNames }, speed, easing, callback ]) : + this._removeClass(classNames); + }, + + _toggleClass: $.fn.toggleClass, + toggleClass: function( classNames, force, speed, easing, callback ) { + if ( typeof force === "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter; + return this._toggleClass( classNames, force ); + } else { + return $.effects.animateClass.apply( this, [( force ? { add:classNames } : { remove:classNames }), speed, easing, callback ]); + } + } else { + // without force parameter; + return $.effects.animateClass.apply( this, [{ toggle: classNames }, force, speed, easing ]); + } + }, + + switchClass: function( remove, add, speed, easing, callback) { + return $.effects.animateClass.apply( this, [{ + add: add, + remove: remove + }, speed, easing, callback ]); + } +}); + + + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +$.extend( $.effects, { + version: "1.9pre", + + // Saves a set of properties in a data storage + save: function( element, set ) { + for( var i=0; i < set.length; i++ ) { + if ( set[ i ] !== null ) { + element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); + } + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function( element, set ) { + for( var i=0; i < set.length; i++ ) { + if ( set[ i ] !== null ) { + element.css( set[ i ], element.data( dataSpace + set[ i ] ) ); + } + } + }, + + setMode: function( el, mode ) { + if (mode === "toggle") { + mode = el.is( ":hidden" ) ? "show" : "hide"; + } + return mode; + }, + + // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + getBaseline: function( origin, original ) { + var y, x; + switch ( origin[ 0 ] ) { + case "top": y = 0; break; + case "middle": y = 0.5; break; + case "bottom": y = 1; break; + default: y = origin[ 0 ] / original.height; + }; + switch ( origin[ 1 ] ) { + case "left": x = 0; break; + case "center": x = 0.5; break; + case "right": x = 1; break; + default: x = origin[ 1 ] / original.width; + }; + return { + x: x, + y: y + }; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { + + // if the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" )) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + "float": element.css( "float" ) + }, + wrapper = $( "
        " ) + .addClass( "ui-effects-wrapper" ) + .css({ + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + }), + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; + + element.wrap( wrapper ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if ( element.css( "position" ) === "static" ) { + wrapper.css({ position: "relative" }); + element.css({ position: "relative" }); + } else { + $.extend( props, { + position: element.css( "position" ), + zIndex: element.css( "z-index" ) + }); + $.each([ "top", "left", "bottom", "right" ], function(i, pos) { + props[ pos ] = element.css( pos ); + if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { + props[ pos ] = "auto"; + } + }); + element.css({ + position: "relative", + top: 0, + left: 0, + right: "auto", + bottom: "auto" + }); + } + element.css(size); + + return wrapper.css( props ).show(); + }, + + removeWrapper: function( element ) { + var active = document.activeElement; + + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + element.parent().replaceWith( element ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + } + + + return element; + }, + + setTransition: function( element, list, factor, value ) { + value = value || {}; + $.each( list, function(i, x){ + var unit = element.cssUnit( x ); + if ( unit[ 0 ] > 0 ) value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; + }); + return value; + } +}); + +// return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { + + // short path for passing an effect options object: + if ( $.isPlainObject( effect ) ) { + return effect; + } + + // convert to an object + effect = { effect: effect }; + + // catch (effect) + if ( options === undefined ) { + options = {}; + } + + // catch (effect, callback) + if ( $.isFunction( options ) ) { + callback = options; + speed = null; + options = {}; + } + + // catch (effect, speed, ?) + if ( $.type( options ) === "number" || $.fx.speeds[ options ]) { + callback = speed; + speed = options; + options = {}; + } + + // catch (effect, options, callback) + if ( $.isFunction( speed ) ) { + callback = speed; + speed = null; + } + + // add options to effect + if ( options ) { + $.extend( effect, options ); + } + + speed = speed || options.duration; + effect.duration = $.fx.off ? 0 : typeof speed === "number" + ? speed : speed in $.fx.speeds ? $.fx.speeds[ speed ] : $.fx.speeds._default; + + effect.complete = callback || options.complete; + + return effect; +} + +function standardSpeed( speed ) { + // valid standard speeds + if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { + return true; + } + + // invalid strings - treat as "normal" speed + if ( typeof speed === "string" && !$.effects.effect[ speed ] ) { + // TODO: remove in 2.0 (#7115) + if ( backCompat && $.effects[ speed ] ) { + return false; + } + return true; + } + + return false; +} + +$.fn.extend({ + effect: function( effect, options, speed, callback ) { + var args = _normalizeArguments.apply( this, arguments ), + mode = args.mode, + queue = args.queue, + effectMethod = $.effects.effect[ args.effect ], + + // DEPRECATED: remove in 2.0 (#7115) + oldEffectMethod = !effectMethod && backCompat && $.effects[ args.effect ]; + + if ( $.fx.off || !( effectMethod || oldEffectMethod ) ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args.duration, args.complete ); + } else { + return this.each( function() { + if ( args.complete ) { + args.complete.call( this ); + } + }); + } + } + + function run( next ) { + var elem = $( this ), + complete = args.complete, + mode = args.mode; + + function done() { + if ( $.isFunction( complete ) ) { + complete.call( elem[0] ); + } + if ( $.isFunction( next ) ) { + next(); + } + } + + // if the element is hiddden and mode is hide, + // or element is visible and mode is show + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + done(); + } else { + effectMethod.call( elem[0], args, done ); + } + } + + // TODO: remove this check in 2.0, effectMethod will always be true + if ( effectMethod ) { + return queue === false ? this.each( run ) : this.queue( queue || "fx", run ); + } else { + // DEPRECATED: remove in 2.0 (#7115) + return oldEffectMethod.call(this, { + options: args, + duration: args.duration, + callback: args.complete, + mode: args.mode + }); + } + }, + + _show: $.fn.show, + show: function( speed ) { + if ( standardSpeed( speed ) ) { + return this._show.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "show"; + return this.effect.call( this, args ); + } + }, + + _hide: $.fn.hide, + hide: function( speed ) { + if ( standardSpeed( speed ) ) { + return this._hide.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "hide"; + return this.effect.call( this, args ); + } + }, + + // jQuery core overloads toggle and creates _toggle + __toggle: $.fn.toggle, + toggle: function( speed ) { + if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { + return this.__toggle.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "toggle"; + return this.effect.call( this, args ); + } + }, + + // helper functions + cssUnit: function(key) { + var style = this.css( key ), + val = []; + + $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { + if ( style.indexOf( unit ) > 0 ) + val = [ parseFloat( style ), unit ]; + }); + return val; + } +}); + + + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend( $.easing, { + def: "easeOutQuad", + swing: function ( x, t, b, c, d ) { + return $.easing[ $.easing.def ]( x, t, b, c, d ); + }, + easeInQuad: function ( x, t, b, c, d ) { + return c * ( t /= d ) * t + b; + }, + easeOutQuad: function ( x, t, b, c, d ) { + return -c * ( t /= d ) * ( t - 2 ) + b; + }, + easeInOutQuad: function ( x, t, b, c, d ) { + if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t + b; + return -c / 2 * ( ( --t ) * ( t-2 ) - 1) + b; + }, + easeInCubic: function ( x, t, b, c, d ) { + return c * ( t /= d ) * t * t + b; + }, + easeOutCubic: function ( x, t, b, c, d ) { + return c * ( ( t = t / d - 1 ) * t * t + 1 ) + b; + }, + easeInOutCubic: function ( x, t, b, c, d ) { + if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t + b; + return c / 2 * ( ( t -= 2 ) * t * t + 2) + b; + }, + easeInQuart: function ( x, t, b, c, d ) { + return c * ( t /= d ) * t * t * t + b; + }, + easeOutQuart: function ( x, t, b, c, d ) { + return -c * ( ( t = t / d - 1 ) * t * t * t - 1) + b; + }, + easeInOutQuart: function ( x, t, b, c, d ) { + if ( (t /= d / 2 ) < 1 ) return c / 2 * t * t * t * t + b; + return -c / 2 * ( ( t -= 2 ) * t * t * t - 2) + b; + }, + easeInQuint: function ( x, t, b, c, d ) { + return c * ( t /= d ) * t * t * t * t + b; + }, + easeOutQuint: function ( x, t, b, c, d ) { + return c * ( ( t = t / d - 1 ) * t * t * t * t + 1) + b; + }, + easeInOutQuint: function ( x, t, b, c, d ) { + if ( ( t /= d / 2 ) < 1 ) return c / 2 * t * t * t * t * t + b; + return c / 2 * ( ( t -= 2 ) * t * t * t * t + 2) + b; + }, + easeInSine: function ( x, t, b, c, d ) { + return -c * Math.cos( t / d * ( Math.PI / 2 ) ) + c + b; + }, + easeOutSine: function ( x, t, b, c, d ) { + return c * Math.sin( t / d * ( Math.PI /2 ) ) + b; + }, + easeInOutSine: function ( x, t, b, c, d ) { + return -c / 2 * ( Math.cos( Math.PI * t / d ) - 1 ) + b; + }, + easeInExpo: function ( x, t, b, c, d ) { + return ( t==0 ) ? b : c * Math.pow( 2, 10 * ( t / d - 1) ) + b; + }, + easeOutExpo: function ( x, t, b, c, d ) { + return ( t==d ) ? b + c : c * ( -Math.pow( 2, -10 * t / d) + 1) + b; + }, + easeInOutExpo: function ( x, t, b, c, d ) { + if ( t==0 ) return b; + if ( t==d ) return b + c; + if ( ( t /= d / 2) < 1) return c / 2 * Math.pow( 2, 10 * (t - 1) ) + b; + return c / 2 * ( -Math.pow( 2, -10 * --t ) + 2 ) + b; + }, + easeInCirc: function ( x, t, b, c, d ) { + return -c * ( Math.sqrt( 1 - ( t /= d ) * t ) - 1 ) + b; + }, + easeOutCirc: function ( x, t, b, c, d ) { + return c * Math.sqrt( 1 - ( t = t / d - 1 ) * t ) + b; + }, + easeInOutCirc: function ( x, t, b, c, d ) { + if ( ( t /= d / 2) < 1 ) return -c / 2 * ( Math.sqrt( 1 - t * t ) - 1 ) + b; + return c / 2 * ( Math.sqrt( 1 - ( t -= 2 ) * t ) + 1 ) + b; + }, + easeInElastic: function ( x, t, b, c, d ) { + var s = 1.70158, + p = d * 0.3, + a = c; + if ( t == 0 ) return b; + if ( ( t /= d ) == 1 ) return b+c; + if ( a < Math.abs( c ) ) { + a = c; + s = p / 4; + } else { + s = p / ( 2 * Math.PI ) * Math.asin( c / a ); + } + return - ( a * Math.pow( 2, 10 * ( t -= 1 ) ) * Math.sin( ( t * d - s) * ( 2 * Math.PI ) / p ) ) + b; + }, + easeOutElastic: function ( x, t, b, c, d ) { + var s = 1.70158, + p = d * 0.3, + a = c; + if ( t == 0 ) return b; + if ( ( t /= d ) == 1 ) return b+c; + if ( a < Math.abs( c ) ) { + a = c; + s = p / 4; + } else { + s = p / ( 2 * Math.PI ) * Math.asin( c / a ); + } + return a * Math.pow( 2, -10 * t ) * Math.sin( ( t * d - s ) * ( 2 * Math.PI ) / p ) + c + b; + }, + easeInOutElastic: function ( x, t, b, c, d ) { + var s = 1.70158, + p = d * ( 0.3 * 1.5 ), + a = c; + if ( t == 0 ) return b; + if ( ( t /= d / 2 ) == 2 ) return b+c; + if ( a < Math.abs( c ) ) { + a = c; + s = p / 4; + } else { + s = p / ( 2 * Math.PI ) * Math.asin( c / a ); + } + if ( t < 1 ) return -.5 * ( a * Math.pow( 2, 10 * ( t -= 1 ) ) * Math.sin( ( t * d - s ) * ( 2 * Math.PI ) / p ) ) + b; + return a * Math.pow( 2, -10 * ( t -= 1 ) ) * Math.sin( ( t * d - s ) * ( 2 * Math.PI ) / p ) *.5 + c + b; + }, + easeInBack: function ( x, t, b, c, d, s ) { + if ( s == undefined ) s = 1.70158; + return c * ( t /= d ) * t * ( ( s+1 ) * t - s ) + b; + }, + easeOutBack: function ( x, t, b, c, d, s ) { + if ( s == undefined ) s = 1.70158; + return c * ( ( t = t / d - 1 ) * t * ( ( s + 1 ) * t + s) + 1) + b; + }, + easeInOutBack: function ( x, t, b, c, d, s ) { + if ( s == undefined ) s = 1.70158; + if ( ( t /= d / 2 ) < 1 ) return c / 2 * ( t * t * ( ( ( s *= 1.525 ) + 1 ) * t - s ) ) + b; + return c / 2 * ( ( t -= 2 ) * t * ( ( ( s *= 1.525 ) + 1 ) * t + s) + 2) + b; + }, + easeInBounce: function ( x, t, b, c, d ) { + return c - $.easing.easeOutBounce( x, d - t, 0, c, d ) + b; + }, + easeOutBounce: function ( x, t, b, c, d ) { + if ( ( t /= d ) < ( 1 / 2.75 ) ) { + return c * ( 7.5625 * t * t ) + b; + } else if ( t < ( 2 / 2.75 ) ) { + return c * ( 7.5625 * ( t -= ( 1.5 / 2.75 ) ) * t + .75 ) + b; + } else if ( t < ( 2.5 / 2.75 ) ) { + return c * ( 7.5625 * ( t -= ( 2.25/ 2.75 ) ) * t + .9375 ) + b; + } else { + return c * ( 7.5625 * ( t -= ( 2.625 / 2.75 ) ) * t + .984375 ) + b; + } + }, + easeInOutBounce: function ( x, t, b, c, d ) { + if ( t < d / 2 ) return $.easing.easeInBounce( x, t * 2, 0, c, d ) * .5 + b; + return $.easing.easeOutBounce( x, t * 2 - d, 0, c, d ) * .5 + c * .5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); diff --git a/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js new file mode 100644 index 0000000..9e92123 --- /dev/null +++ b/public/javascripts/jqplot/examples/jquery-ui/js/jquery.effects.core.min.js @@ -0,0 +1,32 @@ +/* + * jQuery UI Effects 1.9pre + * + * 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/Effects/ + */ +jQuery.effects||function(f,m){function r(c){var a;if(c&&c.constructor===Array&&c.length===3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return s.transparent;return s[f.trim(c).toLowerCase()]}function t(){var c=this.ownerDocument.defaultView?this.ownerDocument.defaultView.getComputedStyle(this,null):this.currentStyle,a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(d=c.length;d--;){b=c[d];if(typeof c[b]==="string")a[f.camelCase(b)]=c[b]}else for(b in c)if(typeof c[b]=== +"string")a[b]=c[b];return a}function o(c,a,b,d){if(f.isPlainObject(c))return c;c={effect:c};if(a===m)a={};if(f.isFunction(a)){d=a;b=null;a={}}if(f.type(a)==="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a&&f.extend(c,a);b=b||a.duration;c.duration=f.fx.off?0:typeof b==="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;c.complete=d||a.complete;return c}function q(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects.effect[c]){if(u&& +f.effects[c])return false;return true}return false}var u=f.uiBackCompat!==false;f.effects={effect:{}};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){var d;d=b.elem;var e=a,g;do{g=f.curCSS(d,e);if(g!=""&&g!=="transparent"||f.nodeName(d,"body"))break;e="backgroundColor"}while(d=d.parentNode);d=r(g);b.start=d;b.end=r(b.end);b.colorInit=true}b.elem.style[a]= +"rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var s={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139, +0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192, +203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},w=["add","remove","toggle"],x={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(c,a){f.fx.step[a]=function(b){if(b.end!=="none"&&!b.setAttr||b.pos===1&&!b.setAttr){jQuery.style(b.elem,a,b.end);b.setAttr= +true}}});f.effects.animateClass=function(c,a,b,d){var e=f.speed(a,b,d);return this.queue(function(){var g=f(this),h=g.attr("class")||"",n,j=e.children?g.find("*").andSelf():g;j=j.map(function(){var k=f(this);return{el:k,originalStyleAttr:k.attr("style")||" ",start:t.call(this)}});f.each(w,function(k,i){if(c[i])g[i+"Class"](c[i])});n=g.attr("class");j=j.map(function(){this.end=t.call(this.el[0]);var k=this.start,i=this.end,v={},l,p;for(l in i){p=i[l];if(k[l]!=p)if(!x[l])if(f.fx.step[l]||!isNaN(parseFloat(p)))v[l]= +p}this.diff=v;return this});g.attr("class",h);j=j.map(function(){var k=this,i=f.Deferred();this.el.animate(this.diff,{duration:e.duration,easing:e.easing,queue:false,complete:function(){i.resolve(k)}});return i.promise()});f.when.apply(f,j.get()).done(function(){g.attr("class",n);f.each(arguments,function(){if(typeof this.el.attr("style")==="object"){this.el.attr("style").cssText="";this.el.attr("style").cssText=this.originalStyleAttr}else this.el.attr("style",this.originalStyleAttr)});e.complete.call(g[0])})})}; +f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a==="boolean"||a===m?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, +[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.9pre",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), +d={width:c.width(),height:c.height()},e=document.activeElement;c.wrap(b);if(c[0]===e||f.contains(c[0],e))f(e).focus();b=c.parent();if(c.css("position")==="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(g,h){a[h]=c.css(h);if(isNaN(parseInt(a[h],10)))a[h]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}c.css(d);return b.css(a).show()}, +removeWrapper:function(c){var a=document.activeElement;if(c.parent().is(".ui-effects-wrapper")){c.parent().replaceWith(c);if(c[0]===a||f.contains(c[0],a))f(a).focus()}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){var h=c.cssUnit(g);if(h[0]>0)d[g]=h[0]*b+h[1]});return d}});f.fn.extend({effect:function(){function c(h){function n(){f.isFunction(k)&&k.call(j[0]);f.isFunction(h)&&h()}var j=f(this),k=a.complete,i=a.mode;(j.is(":hidden")?i==="hide":i==="show")?n():e.call(j[0], +a,n)}var a=o.apply(this,arguments),b=a.mode,d=a.queue,e=f.effects.effect[a.effect],g=!e&&u&&f.effects[a.effect];if(f.fx.off||!(e||g))return b?this[b](a.duration,a.complete):this.each(function(){a.complete&&a.complete.call(this)});return e?d===false?this.each(c):this.queue(d||"fx",c):g.call(this,{options:a,duration:a.duration,callback:a.complete,mode:a.mode})},_show:f.fn.show,show:function(c){if(q(c))return this._show.apply(this,arguments);else{var a=o.apply(this,arguments);a.mode="show";return this.effect.call(this, +a)}},_hide:f.fn.hide,hide:function(c){if(q(c))return this._hide.apply(this,arguments);else{var a=o.apply(this,arguments);a.mode="hide";return this.effect.call(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(q(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=o.apply(this,arguments);a.mode="toggle";return this.effect.call(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a), +e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a, +b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2* +((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+ +b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=e*0.3,h=d;if(a==0)return b;if((a/=e)==1)return b+d;if(h + + +// Create a jquery plugin that prints the given element. +jQuery.fn.print = function(){ + // NOTE: We are trimming the jQuery collection down to the + // first element in the collection. + if (this.size() > 1){ + this.eq( 0 ).print(); + return; + } else if (!this.size()){ + return; + } + + var chart = $(this).closest('div.quintile-outer-container').find('div.jqplot-target'); + var imgelem = chart.jqplotToImageElem(); + console.log(imgelem); + + // ASSERT: At this point, we know that the current jQuery + // collection (as defined by THIS), contains only one + // printable element. + + // Create a random name for the print frame. + var strFrameName = ("printer-" + (new Date()).getTime()); + + // Create an iFrame with the new name. + var jFrame = $( "